Eliminate alcune restrizioni. I caratteri accentati possono essere usati nell’argomento di \esaltaprime e \esaltaultime, ma non al primo posto; in tal caso occorre “nascondere” l’accento in una macro, si veda l’esempio con \accento; attenzione: non con UTF8, spiacente. 🙂 L’attento lettore noterà l’uso delle primitive di e-TeX \detokenize, \scantokens e \unless. 🙂
`\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}\makeatletter
\newcount\split@count\def\@split#1#2{\split@count=#1\relax
\def\split@start{}%
\edef\split@end{\detokenize\expandafter{#2}}%
\loop\ifnum\split@count>0
\edef\split@start{\split@start\expandafter\@car\split@end\@nil}%
\edef\split@end{\expandafter\@cdr\split@end\@nil}%
\ifx\split@end\empty
\split@count=0
\else
\advance\split@count-1
\fi
\repeat}\def\@reverse#1{%
\edef\@temp{\detokenize\expandafter{#1}}%
\def\@esrever{}%
\loop\unless\ifx\@temp\empty
\edef\@esrever{\expandafter\@car\@temp\@nil\@esrever}%
\edef\@temp{\expandafter\@cdr\@temp\@nil}%
\repeat}\newcommand{\esaltaprime}[2][0]{%
\@split{#1}{#2}%
\textbf{\scantokens\expandafter{\split@start}\unskip}%
\scantokens\expandafter{\split@end}\unskip}\newcommand{\esaltaultime}[2][0]{%
\@reverse{#2}\@split{#1}{\@esrever}%
\@reverse{\split@end}\scantokens\expandafter{\@esrever}\unskip%
\@reverse{\split@start}\textbf{\scantokens\expandafter{\@esrever}\unskip}}
\makeatother\newcommand\parola{Italia}
\newcommand\accento{àncora}\begin{document}
\esaltaprime[3]{\accento}\esaltaprime[4]{ancóra} Ciao
\esaltaprime[3]{\parola} Ciao
\esaltaprime[7]{\parola}
\esaltaprime[7]{Cercopiteco}
\esaltaprime{Italia}
\esaltaultime[4]{Cercopiteco}
\esaltaultime[2]{lassù}
\end{document}`
A parte le questioni più TeXniche, la faccenda è abbastanza semplice. La macro \@split raccoglie i primi n caratteri (n è il valore dato come primo argomento) uno alla volta e definisce le due macro \split@start e \split@end, che contengono prima e seconda parte della stringa data come secondo argomento. Se n è maggiore della lunghezza della stringa, il ciclo si interrompe e la seconda parte sarà vuota.Per evidenziare gli ultimi n token della stringa come si fa? Si applica \@split alla stringa rovesciata. Il funzionamento di \@reverse è facile: aggiungo, ovviamente da destra a sinistra, a \@esrever un carattere alla volta, prendendo quello iniziale e ripetendo finché la stringa diventa vuota.
Lascio come esercizio di scrivere la stessa cosa con una macro ricorsiva. 😀
Ciao
Enrico
Sei un mago. 😀 😀
Fai una cosa, aggiungi queste ultime cinque macro, così il servizio è completo:
`
\estraiprime[n]{} \estraiultime[n]{}
`
Poi le complementari
`
\togliprime[n]{} \togliultime[n]{}
`
ed infine
`
\inverti{}% inverte l'ordine da parola a alorap, questa mi è venuta in mente ora.
`
Ciao e grazie ancora
Andrea
PS: sono d’accordo con Lapo, quando hai tempo potresti creare un altro utilissimo pacchetto.