Dans un code, je cherche à savoir si l'argument contient le caractère tube Ouvrir dans l'éditeur Overleaf
\documentclass{article} \usepackage{xstring} \newenvironment{mytabular}[1]{% \IfBeginWith{#1}{|} {\StrGobbleLeft{#1}{1} %si vrai \begin{tabular}{#1}} {\begin{tabular}{||#1||}}} %si faux {\end{tabular}} \begin{document} \begin{mytabular}{c|c} \hline 1 & 2 \\ \hline 3 & 4 \\ \end{mytabular} \bigskip \begin{mytabular}{|cc} \hline 4 & 5\\ \hline 6 & 7 \\ \end{mytabular} \end{document} \end{document} |
Je propose une solution utilisant LuaLaTeX : Ouvrir dans l'éditeur Overleaf
\documentclass{article} \usepackage{luacode} \begin{luacode} function if_begin_tube(String) local x = string.sub(String,1,1) -- on stocke le premier caractère dans une variable if x=="|" then -- si ce premier caractère est un tube... String = string.gsub(String,"|","",1) -- on le supprime de la chaîne tex.sprint("\\begin{tabular}{"..String.."}") -- on ouvre le tableau avec la chaîne modifiée else -- sinon... tex.sprint("\\begin{tabular}{||"..String.."||}") -- on ouvre le tableau avec la chaîne non modifiée encadrée par un double tube end end \end{luacode} \newcommand\BeginMyTabular[1]{\directlua{if_begin_tube(\luastring{#1})}} \newenvironment{mytabular}[1]{\BeginMyTabular{#1}}{\end{tabular}} \begin{document} \begin{mytabular}{c|c} \hline 1 & 2 \\ \hline 3 & 4 \\ \end{mytabular} \bigskip \begin{mytabular}{|cc} \hline 4 & 5\\ \hline 6 & 7 \\ \end{mytabular} \end{document} |
Je pensais que Ayant compris (@touhami l'a confirmé) que cela n’était pas possible avec Ouvrir dans l'éditeur Overleaf
\documentclass{article} \makeatletter \def\sitube#1{\@sitube#1\@nil} \def\@sitube{% \@ifnextchar|{\tube}{\notube}} \def\tube#1#2\@nil{\textbf{#2}} \def\notube#1\@nil{\emph{#1}} \makeatother \begin{document} \sitube{|toto} \sitube{toto} \end{document} J'ai pu ainsi résoudre mon problème. |