Newsgroup: it.comp.software.tex
Titolo: \verb che manda a capo il testo

Come posso scrivere in LaTeX un nuovo comando che ignori i comandi e i
caratteri speciali come \verb ma che permetta al testo di andare a
capo correttamente? E` possibile?
Ho provato a "giocare" con i catcode ma non ho concluso nulla anche
perché penso che la mia strategia sia sbagliata in quanto l'argomento
al comando è valutato prima del comando (penso).
-- 
Marco Barisione (ICQ 84277092)

 al comando č valutato prima del comando (penso).
\usepackage{alltt}
\begin{alltt}
...
\end{alltt}
(qualche carattere speciale č comunque interpretato).
Ciao
Enrico

\end{alltt}
Grazie ma non si comporta esattamente come vorrei, mi rimangono due
problemi:
1 - Non va a capo dopo correttamente all'interno del testo, cioè
|\begin{alltt}
|ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao ciao 
|\end{alltt}
mi dà overfull \hbox e non va a capo.
2 - Avrei bisogno che il testo continui la riga e non vada a capo dove
inizia e finisce l'ambiente.


 scrive:

Direi che vuoi un po' troppo. Quando una cosa diventa troppo difficile
da fare in LaTeX, spesso è perché non va bene farla.
Ad esempio, non interpretare i caratteri speciali è per trascrivere
listati di programmi \emph{et similia}. Ma allora non ha molto
senso richiedere che vengano giustificati secondo le regole
per i paragrafi di testo, né che il listato cominci durante
una riga di testo normale.
Facci capire che vuoi fare, forse una soluzione si trova.
Ciao
Enrico

una riga di testo normale.
All'inizio avevo definito un comando si limita ad utilizzare lstinline
del package listings:
\newcommand{\ic}[1]{\lstinline!#1!}
Il comando \ic lo uso per indicare il codice contenuto nel testo,
generalmente sono solo nomi di classi, funzioni, variabili e simili.
Alcuni di questi sono però piuttosto lunghi quindi LaTeX non riesce a
sistemare da solo le cose e ovviamente non vorrei farlo a mano.
Quindi ho pensato che in realtà in questo caso non ho bisogno di
listings ma mi basta usare un font a spaziatura fissa, quindi pensavo
di potere, in modo abbastanza semplice, usare un font a spaziatura
fissa senza però dover cambiare tutti i simboli speciali come "_" in
"\_" o simili.
Ho provato con i catcode ma non ho ottenuto quello che volevo anche se
il codice mi sembra giusto:
\newcommand{\ic}[1]{\catcode`\_=12 #1 \catcode`\_=8}
Ma non va, suppongo che la stringa in #1 venga interpretata prima che
sia eseguito il corpo del comando (o sbaglio?) infatti se faccio
direttamente:
\catcode`\_=12 1_2 \catcode`\_=8
Non ottengo errori anche se ottengo un altro simbolo (una specie di
apostrofo).
Se mi dici che non c'è modo di farlo semplicemente cambio tutti i _ in
\_ contenuti in un comando \ic con un semplice script, se domani
volessi ricambiare tutto lo riconverto allo stesso modo.


 sia eseguito il corpo del comando (o sbaglio?)
Giusto. La maniera per fare il giochetto è di solito la seguente:
\newcommand{\ic}{\catcode`\_=12\relax\ichelp}
\newcommand{\ichelp}[1]{#1\relax\catcode`\_=8}
Ovviamente il font deve avere il caratter al posto giusto, e questa è 
tutta un'altra storia.
-- 
Giuseppe "Oblomov" Bilotta
Axiom I of the Giuseppe Bilotta
theory of IT:
Anything is better than MS

\newcommand{\ichelp}[1]{#1\relax\catcode`\_=8}
Grazie ad entrambi, era proprio quello che volevo.
\ic però non funziona correttamente come argomento di altri comandi:
\documentclass{article}
\newcommand{\ic}{\catcode`\_=12\relax\ichelp}
\newcommand{\ichelp}[1]{\texttt{#1}\relax\catcode`\_=8{}}
\newcommand{\nop}[1]{#1}
\begin{document}
\ic{QUI_FUNZIONA}, \nop{\ic{QUI_NO}}
\end{document}
L'errore è il tipico "Missing $ inserted." Succede per lo stesso
motivo che ho detto nel post precedente (cioè perché l'argomento viene
trasformato prima che il comando sia eseguito)?
Esiste un modo per evitare questo problema? A dire la verità se non
c'è una soluzione facile posso anche aggiungere un "\_" intanto su 45
pagine il problema mi si presenta una sola volta.


 Esiste un modo per evitare questo problema?
Se usi eLaTeX invece di LaTeX, puoi definire \ic nel seguente modo.
\newcommand{\ic}{\catcode`\_=12\relax\scantokens{#1}\catcode`\_=8}
(Oppure:
\newcommand{\ic}{{\catcode`\_=12\relax\scantokens{#1}}}
(Occhio al numero di graffe!)
ma non sono sicuro che sia piů veloce.)
