Re: Campi delimitati in tex con \ o {

#18110
Up
0
Down
::

Devo dividere un token in tex delimitato in questo modo
`
xxx\hbox {{\mathsurround \z@ \ensuremath {^{\unhbox \voidb@x \hbox {\fontsize 6\z@ \normalfont \unskip 1}}}}}`
o alternativamente così
`
xxx{1}
`
Ho provato a creare il comando
`
\def\@taglia#1\hbox{#1}

\def\@taglia#1\char123{#1}
`
per ottenere solo xxx
ma mi da un errore di extra parentesi nell’argomento della funzione.

Non che si capisca molto bene, sai? Provo a sfogliare i tarocchi e vediamo se indovino.

Hai una lista di token che contiene qualcosa seguita da una graffa aperta, cose che non ti interessano e finalmente una graffa chiusa. Ciò che vuoi è estrarre ciò che viene prima delle graffe. Il problema è che solo l’ultimo argomento può essere delimitato da una graffa aperta e questo si fa precedendo la graffa di apertura nella definizione con #.
Devi prima trovare il tuo argomento xxx, poi buttare via la parte fra graffe.
`\def\@taglia#1#{#1\@gobble}`
La macro \@gobble è una funzione del nucleo di LaTeX:
`\def\@gobble#1{}`
Vediamo che succede con la chiamata \@taglia xxx{1}: \@taglia cerca il suo argomento, che è delimitato da una graffa aperta, quindi diventa xxx; una volta trovato l’argomento, lo rimette nella lista di token e ci aggiunge \@gobble in fondo che cerca il suo argomento, cioè il gruppo tra graffe e se lo mangia.

Attento però che \@taglia{xxx{1}} si mangia tutto, perché l’argomento di \@taglia è vuoto. Se vuoi usarlo così, devi fare in un altro modo
`\def\@@taglia#1#{#1\@gobble}
\def\@taglia#1{\@@taglia #1}`
Annotazione spero utile: \char123 non equivale a scrivere una graffa nella lista di token, ma è un comando per stampare il carattere 123.

Ma questo è solo l’assaggio. Il tuo problema è che dopo xxx ci può essere \hbox. Io intanto passerei la lista di token come argomento completo a una macro
`\def\@taglia#1{\@taglia@i #1\hbox\@nil}
\def\@taglia@i#1\hbox#2\@nil{%
\@taglia@ii #1{}}
\def\@taglia@ii#1#{%
\def\@taglia@iii{#1}%
\expandafter\@taglia@iii\@gobble}`
Adesso \@taglia{xxx{1}} si espande come xxx{}, mentre \@taglia{xxx\hbox{1}} si espande come xxx. Se non ti va quella coppia di graffe in più, bisogna lavorarci ancora.

Se poi oltre a \hbox puoi avere altro, be’, il lavoro è assai più complicato.

Ciao
Enrico

Go to top