È possibile infatti ottenere esattamente quello che vuoi:
\newcommand{\dialogueline}{\begingroup\catcode`\^^M=12 \[email protected]}
{\catcode`\^^M=12\gdef\[email protected]#1#2^^M{\begin{dialogue}{#1}#2\end{dialogue}\endgroup}}
Questo codice deve essere \makeatletter
-protected — sia circondato da \makeatletter
/\makeatother
(modificare: questo significa che si inserisce \makeatletter
prima della definizione e \makeatother
dopo di esso) o in un file .sty
. Si noti che un ambiente denominato dialogue
definisce un comando denominato \dialogue
, quindi è necessario un nome diverso. Non cambiare la formattazione!
Il modo in cui funziona è che \dialogueline
è un comando che non accetta argomenti, ma che si espande invece a più sequenze. Primo, un token di apertura di gruppo, per mettere tutto ciò che segue nel suo ambito. In secondo luogo, la sequenza \catcode`^^M=12
. LaTeX assegna ciascuna lettera a catcode: un numero che dice di che tipo si tratta. Ad esempio, il backslash è catcode 0, il costruttore del nome-comando; le lettere sono catcode 11; e caratteri non stampabili, come il simbolo at, sono catcode 12. Questa sequenza rende ^^M
, il carattere newline, ha catcode 12, quindi possiamo interagire con esso. Infine, scriviamo il comando \[email protected]
, che fa il sollevamento pesante.
Successivamente, definiamo \[email protected]
. Lo facciamo all'interno di un gruppo in cui il carattere di nuova riga è catcode 12, così come lo sarà quando viene espanso lo \dialogueline
. Si noti che questo è il motivo per cui non è possibile interrompere la seconda riga con una nuova riga — che sarebbe interpretata come testo. Successivamente, definiamo \[email protected]
per prendere due argomenti, terminando con una nuova riga; si espande prendendo il primo argomento (che si passa tra parentesi) e passandolo come argomento all'ambiente dialogue
e passando il secondo argomento (tutto dopo il primo e prima della fine della riga) come corpo dell'ambiente. Infine, \[email protected]
termina il gruppo aperto in \dialogueline
, in modo che la modifica al catcode di ^^M
non sia visibile da nessun'altra parte. Detto questo, puoi scrivere
\dialogueline{Johnny} Some dialogue.
\dialogueline{Jane} I see.
e tutto dovrebbe funzionare.
fonte
2010-04-29 06:14:10
a seconda dell'editor che si utilizza, si potrebbe voler esaminare anche un pacchetto snippet. – Mica
+1 Questa è una domanda davvero interessante – Geoff