% !TeX TXS-program:compile = txs:///lualatex \documentclass[tikz]{standalone} %\usepackage[utf8]{inputenc} %\usepackage[T1]{fontenc} \usepackage{customenvs-tikzpictos} \usepackage{tablericons} \usepackage{cabin} \usepackage[french,english]{babel} \setlength\parindent{0pt} %====height \newlength\badgeAIheightoftext \setlength\badgeAIheightoftext{0.25cm} %====AIgen \newlength\tkzbadgeaiheight \newlength\tkzbadgeaidepth \defKV[tkzbadgeai]{% style=\def\tkzbadgeaistyle{#1},% font percent=\tikzset{badgeai font percent/.style={font=#1}},% font label=\tikzset{badgeai font/.style={font=#1}},% strut=\def\tkzbadgeaistrut{#1},% dstrut=\def\tkzbadgeaidstrut{#1} } \setKVdefault[tkzbadgeai]{% style=rect,% font percent=\bfseries\sffamily,% font label=\bfseries\sffamily,% strut={M},% dstrut={(qM)} } \newcommand\inttkzbadgeai[1]{% % \draw[thin,lightgray,xstep=0.25,ystep=0.25] (0,0) grid (6,2.5) ; % \draw[gray,xstep=0.5,ystep=0.5] (0,0) grid (6,2.5) ; \IfStrEq{\tkzbadgeaistyle}{rect} {% \draw[line width=\fpeval{\tkzbadgeaiscale*0.75}mm,rounded corners=\fpeval{\tkzbadgeaiscale*3.75}mm] (0,0) rectangle (6,2.5) ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,lightgray!75,line cap=round] (2.25,0.75)--(5.5,0.75) ; \xintifboolexpr{#1 == 0}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{brain}} ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{0\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagezero}} ; }% {} \xintifboolexpr{#1 == 20}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-certificate}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,cyan!50,line cap=round] (2.25,0.75)--++({0.2*3.25},0) ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{20\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagetwentyA}} ; \draw (2.0625,1.25) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagetwentyB}} ; }% {}% \xintifboolexpr{#1 == 40}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-digit}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!50,line cap=round] (2.25,0.75)--++({0.4*3.25},0) ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{40\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagefourtyA}} ; \draw (2.0625,1.25) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagefourtyB}} ; }% {}% \xintifboolexpr{#1 == 60}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-text-ai}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75,line cap=round] (2.25,0.75)--++({0.6*3.25},0) ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{60\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagesixtyA}} ; \draw (2.0625,1.25) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagesixtyB}} ; }% {}% \xintifboolexpr{#1 == 80}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-spark}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75!red,line cap=round] (2.25,0.75)--++({0.8*3.25},0) ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{80\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdageeightyA}} ; \draw (2.0625,1.25) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdageeightyB}} ; }% {}% \xintifboolexpr{#1 == 100}% {% \draw (1,1.25) node[inner sep=0pt] {\tablericon[height=1.75cm]{robot}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,red,line cap=round] (2.25,0.75)--++({1*3.25},0) ; \draw (5.25,0.375) node[badgeai font percent,left,inner sep=0pt] {\resizebox{!}{0.225cm}{100\% \labelofbadgeAI}} ; \draw (2.0625,1.75) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagehundredA}} ; \draw (2.0625,1.25) node[badgeai font,right,inner sep=0pt,text width=2.25cm] {\resizebox{!}{\badgeAIheightoftext}{\globalphantombadge\labelofdagehundredB}} ; }% {}% }% {}% \IfStrEq{\tkzbadgeaistyle}{carre} {% \draw[line width=\fpeval{\tkzbadgeaiscale*0.75}mm,rounded corners=\fpeval{\tkzbadgeaiscale*3.75}mm] (0,0) rectangle (2.5,2.5) ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,lightgray!75,line cap=round] (0.3,0.55)--(2.2,0.55) ; \xintifboolexpr{#1 == 0}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{brain}} ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{0\% \labelofbadgeAI}} ; }% {} \xintifboolexpr{#1 == 20}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-certificate}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,cyan!50,line cap=round] (0.3,0.55)--++({0.2*1.9},0) ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{20\% \labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 40}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-digit}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!50,line cap=round] (0.3,0.55)--++({0.4*1.9},0) ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{40\% \labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 60}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-text-ai}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75,line cap=round] (0.3,0.55)--++({0.6*1.9},0) ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{60\% \labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 80}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-spark}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75!red,line cap=round] (0.3,0.55)--++({0.8*1.9},0) ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{80\% \labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 100}% {% \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{robot}} ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,red,line cap=round] (0.3,0.55)--++({1*1.9},0) ; \draw (1.25,0.225) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.225cm}{100\% \labelofbadgeAI}} ; }% {}% }% {}% \IfStrEq{\tkzbadgeaistyle}{ligne} {% \draw[line width=\fpeval{\tkzbadgeaiscale*0.75}mm,rounded corners=\fpeval{\tkzbadgeaiscale*3.75}mm] (0,0) rectangle (3,1) ; \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,lightgray!75,line cap=round] (1,0.5)--(2.5,0.5) ; \xintifboolexpr{#1 == 0}% {% \filldraw[green!50!black] (1.15,0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{brain}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{0\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {} \xintifboolexpr{#1 == 20}% {% \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,cyan!50,line cap=round] (1,0.5)--({1.15 + 1*(1.2)/5},0.5) ; \filldraw[cyan!50] ({1.15 + 1*(1.2)/5},0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{file-certificate}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{20\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 40}% {% \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!50,line cap=round] (1,0.5)--({1.15 + 2*(1.2)/5},0.5) ; \filldraw[orange!50] ({1.15 + 2*(1.2)/5},0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{file-digit}} ; % \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-digit}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{40\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 60}% {% \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75,line cap=round] (1,0.5)--({1.15 + 3*(1.2)/5},0.5) ; \filldraw[orange!75] ({1.15 + 3*(1.2)/5},0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{file-text-ai}} ; % \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-text-ai}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{60\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 80}% {% \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,orange!75!red,line cap=round] (1,0.5)--({1.15 + 4*(1.2)/5},0.5) ; \filldraw[orange!75!red] ({1.15 + 4*(1.2)/5},0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{file-spark}} ; % \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{file-spark}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{80\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {}% \xintifboolexpr{#1 == 100}% {% \draw[line width=\fpeval{\tkzbadgeaiscale*3}mm,red,line cap=round] (1,0.5)--({1.15 + 5*(1.2)/5},0.5) ; \filldraw[red] ({1.15 + 5*(1.2)/5},0.5) circle[radius=0.35cm] node[inner sep=0pt] {\tablericon[height=0.6cm]{robot}} ; % \draw (1.25,1.575) node[inner sep=0pt] {\tablericon[height=1.75cm]{robot}} ; \draw (0.5,0.667) node[badgeai font percent,inner sep=0pt,xscale=0.667] {\resizebox{!}{0.225cm}{100\%}} ; \draw (0.5,0.333) node[badgeai font percent,inner sep=0pt] {\resizebox{!}{0.2cm}{\labelofbadgeAI}} ; }% {}% }% {}% } \NewDocumentCommand\tkzbadgeai{ O{} D<>{} m m }{% %1 = keys %2 = tikz options %3 = percentage \restoreKV[tkzbadgeai]% \setKV[tkzbadgeai]{#1}% \intpictotestautodautolen{#4}% {% \settoheight\tkzbadgeaiheight{\hbox{\tkzbadgeaistrut}}% }% {% \settototalheight\tkzbadgeaiheight{\hbox{\tkzbadgeaidstrut}}% \settodepth\tkzbadgeaidepth{\hbox{\tkzbadgeaidstrut}}% }% {% \setlength\tkzbadgeaiheight{#4}% }% \IfStrEq{\tkzbadgeaistyle}{ligne}% {% \xdef\tkzbadgeaiscale{\fpeval{\tkzbadgeaiheight/10.75mm}}% }% {% \xdef\tkzbadgeaiscale{\fpeval{\tkzbadgeaiheight/25.75mm}}% }% %picture \intpictotestdautolen{#4}% {% %\setlength\tkzbadgeaidepth{-\tkzbadgeaidepth}% \raisebox{-\tkzbadgeaidepth}{% \begin{tikzpicture}[scale=\tkzbadgeaiscale,transform shape] \inttkzbadgeai{#3} \end{tikzpicture}% }% }%#3 {% \begin{tikzpicture}[scale=\tkzbadgeaiscale,transform shape] \inttkzbadgeai{#3} \end{tikzpicture}% }% } \begin{document} %====fr \def\labelofbadgeAI{d'IA} \def\labelofdagezero{Produit sans IA.} \def\labelofdagetwentyA{Produit sans IA,} \def\labelofdagetwentyB{mais vérifié par IA.} \def\labelofdagefourtyA{Plan ou brouillon par IA,} \def\labelofdagefourtyB{contenu produit sans IA.} \def\labelofdagesixtyA{Contenu produit par IA,} \def\labelofdagesixtyB{retouches manuelles.} \def\labelofdageeightyA{Contenu produit par IA,} \def\labelofdageeightyB{et relu sans IA.} \def\labelofdagehundredA{Contenu produit} \def\labelofdagehundredB{entièrement par IA.} \def\globalphantombadge{\vphantom{\labelofdagezero\labelofdagetwentyA\labelofdagetwentyB\labelofdagefourtyA\labelofdagefourtyB\labelofdagesixtyA\labelofdagesixtyB\labelofdageeightyA\labelofdageeightyB\labelofdagehundredA\labelofdagehundredB}} \tkzbadgeai{0}{25.75mm} \tkzbadgeai{20}{25.75mm} \tkzbadgeai{40}{25.75mm} \tkzbadgeai{60}{25.75mm} \tkzbadgeai{80}{25.75mm} \tkzbadgeai{100}{25.75mm} %carre \tkzbadgeai[style=carre]{0}{25.75mm} \tkzbadgeai[style=carre]{20}{25.75mm} \tkzbadgeai[style=carre]{40}{25.75mm} \tkzbadgeai[style=carre]{60}{25.75mm} \tkzbadgeai[style=carre]{80}{25.75mm} \tkzbadgeai[style=carre]{100}{25.75mm} %ligne \tkzbadgeai[style=ligne]{0}{10.75mm} \tkzbadgeai[style=ligne]{20}{10.75mm} \tkzbadgeai[style=ligne]{40}{10.75mm} \tkzbadgeai[style=ligne]{60}{10.75mm} \tkzbadgeai[style=ligne]{80}{10.75mm} \tkzbadgeai[style=ligne]{100}{10.75mm} %====en \def\labelofbadgeAI{AI} \def\labelofdagezero{No AI used.} \def\labelofdagetwentyA{No AI used,} \def\labelofdagetwentyB{but AI-verified.} \def\labelofdagefourtyA{AI outline/draft,} \def\labelofdagefourtyB{content w/o AI.} \def\labelofdagesixtyA{AI-generated,} \def\labelofdagesixtyB{manually edited.} \def\labelofdageeightyA{AI-generated content,} \def\labelofdageeightyB{reviewed w/o AI.} \def\labelofdagehundredA{Fully AI-generated} \def\labelofdagehundredB{\vphantom{L}content.} \def\globalphantombadge{\vphantom{\labelofdagezero\labelofdagetwentyA\labelofdagetwentyB\labelofdagefourtyA\labelofdagefourtyB\labelofdagesixtyA\labelofdagesixtyB\labelofdageeightyA\labelofdageeightyB\labelofdagehundredA\labelofdagehundredB}} \tkzbadgeai{0}{25.75mm} \tkzbadgeai{20}{25.75mm} \tkzbadgeai{40}{25.75mm} \tkzbadgeai{60}{25.75mm} \tkzbadgeai{80}{25.75mm} \tkzbadgeai{100}{25.75mm} %carre \tkzbadgeai[style=carre]{0}{25.75mm} \tkzbadgeai[style=carre]{20}{25.75mm} \tkzbadgeai[style=carre]{40}{25.75mm} \tkzbadgeai[style=carre]{60}{25.75mm} \tkzbadgeai[style=carre]{80}{25.75mm} \tkzbadgeai[style=carre]{100}{25.75mm} %ligne \tkzbadgeai[style=ligne]{0}{10.75mm} \tkzbadgeai[style=ligne]{20}{10.75mm} \tkzbadgeai[style=ligne]{40}{10.75mm} \tkzbadgeai[style=ligne]{60}{10.75mm} \tkzbadgeai[style=ligne]{80}{10.75mm} \tkzbadgeai[style=ligne]{100}{10.75mm} \end{document}