\chapter{Formater du texte} Manipuler du texte, afin de le modifier, de le mettre en forme, de le présenter de façon harmonieuse, tout le monde l'a déja fait, avec des outils divers et variés et des résultats parfois (ou souvent) hasardeux. Heureusement, Unix\index{Unix} a été conçu quasiment dès le départ avec tout ce qu'il faut pour traiter et mettre en page du texte. \section{fmt et ses copains} \index{fmt}\index{tr} Nous allons voir quelques outils de base, simple et efficace, mais qui ont parfois quelques limitations. Le premier est \texttt{fmt} qui permet de remettre en forme un texte. \begin{verbatim} tth@plop:~/Ecriture/Ordinateur$ cat texte.txt Ce morceau de texte n'est pas bien formaté. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nunc sapien, porta id pellentesque at, elementum et felis. Curabitur condimentum ante in metus iaculis quis congue diam commodo. tth@plop:~/Ecriture/Ordinateur$ fmt texte.txt Ce morceau de texte n'est pas bien formaté. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus nunc sapien, porta id pellentesque at, elementum et felis. Curabitur condimentum ante in metus iaculis quis congue diam commodo. \end{verbatim} %------------------------------------------------------------- \section{La famille \texttt{roff}} \index{roff}\label{roff} \index{groff}\index{troff} % % https://linuxfr.org/users/karchnu/journaux/redecouverte-roff % https://pjfichet.github.io/utroff/ % https://allthingsopen.org/articles/linux-and-unix-experiment-part-2 \textbf{Roff} est l'outil qui a permis à quelques hackers légendaire de justifier auprès de leur hiérarchie le développement d'une machine de jeu, il est donc légitime d'en parler, non ? Après quelques minutes d'expérimentation, un premier souci arrive% \footnote{Mais qui est peut-être causé par l'ancienneté de mon système ?}. Il semble bien que \texttt{groff} ne sache pas lire les fichiers encodés en \textbf{utf8}\index{utf8}. Il faut donc utiliser un hack avec \texttt{recode} en prenant bien soin d'utiliser une redirection vers \texttt{stdin} comme ceci : \begin{verbatim} < $BASENAME.txt recode utf8..latin1 | groff -Tutf8 \end{verbatim} D'un autre coté, c'est \texttt{roff} qui est utilisé pour formater les pages du manuel Unix. La documentation, c'est important. C'est pour ça que j'en cause page \pageref{chap:manpages}. Voyons rapidement un exemple minimum compilable\index{EMC}, le fichier \texttt{premier.roff}~: \lstinputlisting{code/roff/premier.roff} Il y a deux choses différentes ici : les instructions de formatage et le texte en lui-même. Une instruction est placée en début de ligne. Elle commence par un point, et est constituée de deux lettres, eventuellement suivie de paramètres. Nous avons \texttt{.ti} (\textsl{temporary indent}) qui gère l'indentation de la ligne qui suit, et \texttt{.sp} (\textsl{spacing}) qui va sauter une ou plusieurs lignes. Après compilation par la commande "\texttt{nroff -Tutf8 < premier.roff > premier.text}", nous obtenons ce résultat~: \begin{verbatim} hello world. Ceci est le premier exemple avec nroff. je vais essayer quelques variations de mise en page en jouant sur les diverses marges, puis explorer les "mises en avant" comme le gras, l’italique, le soulignement, toussa. Ensuite il me faudra solutionner le souci avec UTF8 :( \end{verbatim} On peut dire que c'est un bon début, avec juste deux commandes, on a déja un résultat visible. Voyons maintenant quelques autres possibilités du roff de base. Mais une mise en page un peu avancée peut devenir vite fastidieuse avec ces instructions de bas niveau. \subsection{eqn} \begin{quote} \texttt{eqn} compiles descriptions of equations embedded within troff input files into commands that are understood by troff. \end{quote} \subsection{tbl} \begin{quote} \texttt{tbl} compiles descriptions of tables embedded within troff input files into commands that are understood by troff. \end{quote} \subsection{pic} \begin{quote} \texttt{pic} compiles descriptions of pictures embedded within troff input files into commands that are understood by troff. \end{quote} \subsection{Autres trucs...} \texttt{colcrt} : filter nroff output for CRT previewing %------------------------------------------------------------- \section{yodl} \index{yodl} \begin{quote} Yodl is a package that implements a pre-document language and tools to process it. The idea of Yodl is that you write up a document in a pre-language, then use the tools (e.g. yodl2html) to convert it to some final document language. Current converters are for HTML, man, LaTeX SGML and texinfo, a poor-man's text converter and an experimental xml converter. \end{quote} %------------------------------------------------------------- \section{zoem} \index{zoem} General-purpose macro/programming language for transforming text \begin{quote} Zoem is a language for transforming text. It supports the creation of light-weight mark-up languages as macro packages built on top of zoem. PUD (Portable Unix Documentation) provides two such mini-languages and is shipped with zoem. The PUD languages are for generating manpages and FAQ documents in both HTML and troff. \end{quote}