Les caractères de dessin ascii en latex (comme pstree)
Publié par The Troll le 19 05 2021

Parfois, il vous prend l'envie de copier-coller une sortie d'un terminal sous linux pour faire un cours en latex (pour une formation linux) par exemple la sortie de pstree ou, pour mon cas d'un systemctl list-dependencies, un truc qui donne quelque chose comme çà :

systemdefault.target
● ├─exim4.service
● ├─hddtemp.service
● ├─slim.service
● ├─systemd-update-utmp-runlevel.service
● └─multi-user.target
●   ├─apache2.service
Mais latex il aime pas du tout ça, mais alors pas du tout, et il vous le fait savoir avec des insultes bien senties qui ressemblent à cela :
! Package inputenc Error: Unicode char ● (U+25CF)
(inputenc)                not set up for use with LaTeX.
! Package inputenc Error: Unicode char ├ (U+251C)
(inputenc)                not set up for use with LaTeX.
! Package inputenc Error: Unicode char ─ (U+2500)
(inputenc)                not set up for use with LaTeX.
! Package inputenc Error: Unicode char └ (U+2514)
(inputenc)                not set up for use with LaTeX.
! Package inputenc Error: Unicode char │ (U+2502)
(inputenc)                not set up for use with LaTeX.
Alors bien entendu vous vous précipitez dans votre moteur favoris, pour trouver une solution et vous tombez sur une pléthore de gens qui vous proposent de les dessiner avec tkiz. Malheureux... c'est pour cela qu'il faut lire les docs, le plus possible. Parce que latex à prévu un package pour le faire tout seul, il suffit d'ajouter dans votre préambule

\usepackage{pmboxdraw} % For lines form from terminal
\DeclareUnicodeCharacter{25CF}{\textbullet}

Et là, il le fait pour vous, sans vous prendre le choux. Vous avez remarqué que j'ai ajouté \DeclareUnicodeCharacter{25CF}{\textbullet} parce que le rond noir ● qui est dans la sortie de systemctl n'est pas dans le dessins ascii des boites.

J'espère que cela vous fera gagner du temps un jour et que vous trouverez ce billet dans votre moteur de recherche favori.

Je vous mets en téléchargement la liste des symboles dispo en latex, cela vaut le coup d'y jeter un coup d'oeil : latex_symbols.pdf.

Debian linux - Latex - Commentez
Le if en latex, c'est simple parfois mais pas tout le temps.
Publié par The Troll le 20 04 2021

Oui les p'tits clous, 2 billets en un rien de temps (et j'en ai un troisième sous le coude, mais comme il est 'politique' j'ai la flemme). Donc deuxième billet pour annoncer au monde entier que j'ai résolu un problème que j'avais avec latex, dans une application (on dit appliance ?) de mon cru (ui il y a un R) utilisant latex.

Pour expliquer simplement, j'ai une macro qui reçoit des arguments, juste que là c'est assez simple. Disons que dans cette macro je teste pour savoir si un argument est vide (ui, ils peuvent être vides, sinon c'est moins drôle). Pour cela j'utilise le package \ifthen comme cela :


\RequirePackage{ifthen}

\RequirePackage{ color, graphicx, fancyhdr}
\definecolor{t3}{RGB}{85,212,0}

\newcommand*{\truc}[3]{
Écrit le #1
% si le 3 n'est pas vide écrit le 3
\ifthenelse{\equal{#3}{}}{}{\noindent{{\color{t3}\ding{109}}\itshape~ #3} ~\\}

Écrit le #2
}

Pour le moment tout va bien, la vie est belle et cela fonctionne. SAUF SAUF SAUF que si l'argument en question contient du code latex, la compilation [s|t]e plante avec un log pas forcément facile à comprendre :


! Incomplete \iffalse; all text was ignored after ligne....

Après avoir bataillé un peu de temps à comprendre (je suis pas un dieu en latex) j'ai finalement utilisé une autre construction du même paquet \ifx:


% vvvv le 3 est là
\ifx&#3&%
\else {\begin{small}\vbox{\begin{list}{}{}#3 ~\end{list}}\end{small}}

Et là roulement de tambour cela compile et fait ce qu'il faut comme il faut où il faut. Je suis joie.

Debian linux - Libre - Latex - Commentez