%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % This is the TikZ-shields package % A package to draw badges in the style of shields.io with tikz % Maintained by thomas-saigre % % Project repository and bug tracker: % https://github.com/thomas-saigre/tikz-shields % % Released under the GNU GENERAL PUBLIC LICENSE v3 % See https://github.com/thomas-saigre/tikz-shields/blob/main/LICENSE % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesPackage{tikz-shields}[2025/05/12 version v0.1 Drawing badges with TikZ] \@ifpackageloaded{tikz}{}{\RequirePackage{tikz}} \@ifpackageloaded{hyperref}{}{\RequirePackage{hyperref}} \@ifpackageloaded{tcolorbox}{}{\RequirePackage{tcolorbox}} \tcbuselibrary{skins} \@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}} \@ifpackageloaded{ifthen}{}{\RequirePackage{ifthen}} \DeclareOptionX{font}[\sf]{\def\shield@default@font{#1}} \DeclareOptionX{labelColor}[default-left]{\def\shield@default@labelColor{#1}} \DeclareOptionX{color}[default-blue]{\def\shield@default@color{#1}} \DeclareOptionX{colorLeft}[white]{\def\shield@default@colorLeft{#1}} \DeclareOptionX{colorRight}[white]{\def\shield@default@colorRight{#1}} \DeclareOptionX{logoColor}[white]{\def\shield@default@logoColor{#1}} \DeclareOptionX{style}[flat]{% \def\shield@tmp@style{#1}% \def\shield@default@style{wrong} \def\shield@default@error{wrong} \@for\shield@opt:=flat,flat-square,plastic,for-the-badge,social\do{% \ifx\shield@tmp@style\shield@opt \def\shield@default@style{#1}% \fi }% \ifx\shield@default@style\shield@default@error \PackageError{tikz-shields}{Invalid style option '#1'}{Valid options are: flat, flatsquare, plastic, for-the-badge, social.} \fi } \DeclareOptionX{fa}[1]{\def\shield@default@fa{#1}} \definecolor{default-blue}{HTML}{1283c4} \definecolor{default-left}{HTML}{5e5e5e} \definecolor{default-grey}{HTML}{565656} \definecolor{default-green}{HTML}{77d810} \definecolor{default-social-frame}{HTML}{d5d5d5} \definecolor{default-social-top}{HTML}{fcfcfc} \definecolor{default-social-bottom}{HTML}{e5e5e5} \ExecuteOptionsX{font} \ExecuteOptionsX{labelColor} \ExecuteOptionsX{color} \ExecuteOptionsX{colorLeft} \ExecuteOptionsX{colorRight} \ExecuteOptionsX{logoColor} \ExecuteOptionsX{style} \ExecuteOptionsX{fa} \define@key{badge}{labelColor}{\def\badge@labelColor{#1}} \define@key{badge}{color}{\def\badge@color{#1}} \define@key{badge}{colorLeft}{\def\badge@colorLeft{#1}} \define@key{badge}{colorRight}{\def\badge@colorRight{#1}} \define@key{badge}{logo}{\def\badge@logo{#1}} \define@key{badge}{logoColor}{\def\badge@logoColor{#1}} \define@key{badge}{link}{\def\badge@link{#1}} \define@boolkey{badge}{showlink}{\def\badge@showlink{#1}} \define@choicekey{badge}{style}{flat,flat-square,plastic,for-the-badge,social}{\def\badge@style{#1}} \define@key{badge}{baseline}{\def\badge@baseline{#1}} \define@key{badge}{font}{\def\badge@font{#1}} \ProcessOptionsX \ifnum\shield@default@fa=1\relax \@ifpackageloaded{fontawesome}{}{\RequirePackage{fontawesome}} \fi \ifnum\shield@default@fa=5\relax \@ifpackageloaded{fontawesome5}{}{\RequirePackage{fontawesome5}} \fi \ifnum\shield@default@fa=6\relax \@ifpackageloaded{fontawesome6}{}{\RequirePackage{fontawesome6}} \fi \ifnum\shield@default@fa=7\relax \@ifpackageloaded{fontawesome7}{}{\RequirePackage{fontawesome7}} \fi \newtcbox{\socialleft}{ enhanced, nobeforeafter, tcbox raise base, boxrule=1pt, top=0pt, left=0pt, right=0pt, bottom=0pt, colframe=default-social-frame, coltext=black, interior style={top color=default-social-top, bottom color=default-social-bottom}, overlay={} } \newtcbox{\socialright}{ enhanced, nobeforeafter, tcbox raise base, boxrule=0pt, top=0pt, left=0pt, right=0pt, bottom=0pt, colframe=default-social-frame, coltext=black, interior style={top color=default-social-top, bottom color=default-social-bottom}, overlay unbroken and first={ \shade[top color=default-social-top, bottom color=default-social-bottom] ([xshift=0pt, yshift=3pt]frame.west) -- ([xshift=-3pt,yshift=0pt]frame.west) -- ([xshift=0pt, yshift=-3pt]frame.west) -- cycle; \draw[color=default-social-frame, line width=1pt] ([xshift=0pt, yshift=3pt]frame.west) -- ([xshift=-3pt,yshift=0pt]frame.west) -- ([xshift=0pt, yshift=-3pt]frame.west) [rounded corners] -- (frame.south west) -- (frame.south east) -- (frame.north east) -- (frame.north west) [sharp corners] -- cycle; }, } % Creation of a text with dropped shadow % #1 Color of background % #2 Color of the text % #3 Text \newcommand{\droptextshadow}[3]{% \tikz[baseline,outer sep=0pt, inner sep=0pt]{ % Dropped Shadow \node[#1!40!black] at (0,-0.1ex) {#3}; % Text \node[#2] at (0,0) {#3}; }% } % Creation of a text without dropped shadow % #1 Color of the text % #2 Text \newcommand{\droptextnoshadow}[2]{% \tikz[baseline,outer sep=0pt, inner sep=0pt]{ % Text \node[#1] at (0,0) {#2}; }% } % Draw a badge % #1 Default options % #2 Left text % #3 Right text \newcommand{\drawBadgeAux}[3][]{% \def\badge@labelColor{\shield@default@labelColor}% \def\badge@color{\shield@default@color}% \def\badge@colorLeft{\shield@default@colorLeft}% \def\badge@colorRight{\shield@default@colorRight}% \def\badge@logo{}% \def\badge@logoColor{\shield@default@logoColor}% \def\badge@style{\shield@default@style}% \def\badge@baseline{0mm}% \def\badge@font{\shield@default@font}% % \setkeys{badge}{#1}% % \ifthenelse{\equal{\badge@style}{social}}{% % social badge : special handling \badge@font% \mbox{\socialleft{#2\vphantom{#3}}\hspace{1ex}\socialright{#3\vphantom{#2}}}% \normalfont% }{% \def\opt@rounded{rounded corners}% \def\opt@margin{0pt}% \def\opt@gap{5pt}% \def\opt@bottomColor{!60!black}% \def\opt@topColor{}% % \def\opt@baseline{2mm}% \ifthenelse{\equal{\badge@style}{flat}}{% }{% }% \ifthenelse{\equal{\badge@style}{flat-square}}{% \def\opt@rounded{sharp corners}% \def\opt@bottomColor{}% }{% }% % \ifthenelse{\equal{\badge@style}{plastic}}{% \def\opt@topColor{!70!white}% }{% }% % \ifthenelse{\equal{\badge@style}{for-the-badge}}{% \def\opt@rounded{sharp corners}% \def\opt@margin{3pt}% \def\opt@gap{10pt}% \def\opt@bottomColor{}% % \def\opt@baseline{3mm}% }{% }% %% \mbox{% \tcbsidebyside[ bicolor, sidebyside, sidebyside adapt=both, nobeforeafter, nobeforeafter, sidebyside gap=\opt@gap, top=\opt@margin, left=\opt@margin, right=\opt@margin, bottom=\opt@margin, boxrule=0pt, \opt@rounded, baseline=\badge@baseline, interior style={top color=\badge@labelColor\opt@topColor, bottom color=\badge@labelColor\opt@bottomColor}, segmentation style={top color=\badge@color\opt@topColor, bottom color=\badge@color\opt@bottomColor}, ]{% % Left bloc \badge@font% \ifx\badge@logo\@empty% \else% \droptextnoshadow{\badge@logoColor}{\badge@logo}~% \fi% \ifx#2\@empty% \else% \droptextshadow{\badge@labelColor}{\badge@colorLeft}{#2\vphantom{#3}}% % \fi% }{% % Right bloc \badge@font% \droptextshadow{\badge@color}{\badge@colorRight}{#3\vphantom{#2}}% % }% }% }% } \newcommand{\drawBadge}[3][]{% % \def\badge@link{}% \def\badge@showlink{false}% \setkeys{badge}{#1}% \ifx\badge@link\@empty% \drawBadgeAux[#1]{#2}{#3}% \else% {% \ifKV@badge@showlink% \else% \hypersetup{hidelinks}% \fi% \href{\badge@link}{\mbox{\drawBadgeAux[#1]{#2}{#3}}}% }% \fi% } %%% Handling logo depending on the logo library that is loaded \def\tikzshieldGithub{} \def\tikzshieldGitlab{} \def\tikzshieldLicence{} \@ifpackageloaded{fontawesome}% {% \PackageInfo{tikz-shield}{fontawesome is loaded} \def\tikzshieldGithub{\faGithub} \def\tikzshieldGitlab{\faGitlab} \def\tikzshieldLicence{\faBalanceScale} }% {}% \@ifpackageloaded{fontawesome5}% {% \PackageInfo{tikz-shield}{fontawesome5 is loaded} \def\tikzshieldGithub{\faGithub} \def\tikzshieldGitlab{\faGitlab} \def\tikzshieldLicence{\faBalanceScale} }% {}% \@ifpackageloaded{fontawesome6}% {% \PackageInfo{tikz-shield}{fontawesome6 is loaded} \def\tikzshieldGithub{\faGithub} \def\tikzshieldGitlab{\faGitlab} \def\tikzshieldLicence{\faScaleBalanced} }% {}% \@ifpackageloaded{fontawesome7}% {% \PackageInfo{tikz-shield}{fontawesome7 is loaded} \def\tikzshieldGithub{\faGithub} \def\tikzshieldGitlab{\faGitlab} \def\tikzshieldLicence{\faScaleBalanced} }% {}% \NewDocumentCommand{\githubBadge}{O{} O{github} m} { \drawBadge[link=https://github.com/#3, logo=\tikzshieldGithub, #1]{#2}{#3} } \NewDocumentCommand{\gitlabBadge}{O{} O{gitlab} m} { \drawBadge[link=https://gitlab.com/#3, logo=\tikzshieldGitlab, #1]{#2}{#3} } \NewDocumentCommand{\forgeBadge}{O{} O{} m} { \drawBadge[link=https://#3, #1]{#2}{#3} } \NewDocumentCommand{\licenseBadge}{O{} O{license} m} { \drawBadge[link=https://creativecommons.org/#3, logo=\tikzshieldLicence, #1]{#2}{#3} } \NewDocumentCommand{\doiBadge}{O{} O{DOI} m} { \drawBadge[link=https://doi.org/#3, #1]{#2}{#3} } \NewDocumentCommand{\arxivBadge}{O{} O{arXiv} m} { \drawBadge[link=https://arxiv.org/abs/#3, #1]{#2}{#3} } \NewDocumentCommand{\halBadge}{O{} O{HAL} m} { \drawBadge[link=https://hal.science/hal-#3, #1]{#2}{#3} } \NewDocumentCommand{\pubmedBadge}{O{} O{PubMed} m} { \drawBadge[link=https://pubmed.ncbi.nlm.nih.gov/#3, #1]{#2}{#3} }