Salve a tutti,
vorrei scrivere una macro che effettua il parsing di un testo fatto così:
`Questa è una prima riga\\
Seconda riga\\
Terza riga\\
\\
Quinta riga (quella precedente era vuota)\\
Sesta riga\\
Settima riga\\
\\
Nona riga (quella precedente era vuota)\\
Decima riga\\
Undicesima riga
`
La macro dovrebbe semplicemente mettere in neretto la prima riga di ciascun gruppo di tre (riga 1, 5, 9, eccetera). Dovrebbe mettere in corsivo la seconda riga di ciascun gruppo. Infine dovrebbe lasciare inalterata la terza di ciascun gruppo di tre righe.Come posso procedere?
Grazie,
Agostino
Questa potrebbe essere un’idea:
`\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\makeatletter
\newcount\r@wcount
\def\pp@sentinel{\@empty}
\def\pprows{\begingroup\parindent=\z@\endlinechar=\m@ne\ppr@ws}
\def\ppr@ws#1{%
\r@wcount=\z@\ppr@w#1\\\@empty\\}
\def\ppr@w#1\\{%
% controlliamo se siamo alla fine
\def\temp{#1}%
\ifx\temp\pp@sentinel
\expandafter\endgroup
\else
\processr@w{#1}\expandafter\ppr@w
\fi}
\def\processr@w#1{\advance\r@wcount\@ne
\ifcase\r@wcount\or
\textbf{#1}\par\or
\textit{#1}\par\or
#1\par\or
\r@wcount=\z@ \mbox{#1}\par\fi}
\makeatother
\begin{document}
\pprows{%
Questa è una prima riga\\
Seconda riga\\
Terza riga\\
\\
Quinta riga (quella precedente era vuota)\\
Sesta riga\\
Settima riga\\
\\
Nona riga (quella precedente era vuota)\\
Decima riga\\
Undicesima riga}
\end{document}`
\pprows fa solo un’inizializzazione, per evitare i fine riga dopo i \\. Poi chiama \ppr@ws che comincia il lavoro trovando l’argomento e aggiungendo alla fine una sentinella e partendo con la ricorsione tramite la macro \ppr@w.
La ricorsione termina quando si incontra la sentinella, altrimenti consiste nell’incrementare il contatore, trovare l’argomento che è delimitato da \\ e trattarlo con \processr@w. Questa macro guarda il valore del contatore e prende la decisione a seconda se valga 1, 2, 3 oppure 4. Nell’ultimo caso azzera il contatore.
Ciao
Enrico