Sie können in der Tat genau das bekommen, was Sie wollen:
\newcommand{\dialogueline}{\begingroup\catcode`\^^M=12 \[email protected]}
{\catcode`\^^M=12\gdef\[email protected]#1#2^^M{\begin{dialogue}{#1}#2\end{dialogue}\endgroup}}
Dieser Code muss \makeatletter
-protected — entweder durch \makeatletter
/\makeatother
(bearbeiten umgeben sein: Diese bedeutet, dass Sie \makeatletter
vor der Definition und \makeatother
nach) oder in eine .sty
Datei setzen. Beachten Sie, dass eine Umgebung mit dem Namen dialogue
einen Befehl mit dem Namen \dialogue
definiert. Daher benötigen Sie einen anderen Namen. Ändern Sie nicht die Formatierung!
Die Art und Weise, wie es funktioniert, ist \dialogueline
ist ein Befehl, der keine Argumente, sondern stattdessen zu mehreren Sequenzen erweitert. Erstens, ein Gruppenöffnertoken, um alles, was folgt, in seinen eigenen Bereich zu bringen. Zweitens, die \catcode`^^M=12
Sequenz. LaTeX weist jedem Buchstaben eine catcode zu: eine Zahl, die angibt, um welchen Typ es sich handelt. Zum Beispiel ist der Backslash catcode 0, der Befehlsname-Konstruktor; Buchstaben sind Catcode 11; und Nicht-Buchstaben-Druckzeichen, wie das At-Zeichen, sind der catcode 12. Diese Sequenz macht ^^M
, das Newline-Zeichen, den catcode 12, so dass wir damit interagieren können. Schließlich schreiben wir den Befehl \[email protected]
, der das schwere Heben ausführt.
Als nächstes definieren wir \[email protected]
. Wir tun dies innerhalb einer Gruppe, in der das Newline-Zeichen catcode 12 ist, genauso wie es sein wird, wo \dialogueline
erweitert wird. Beachten Sie, dass dies ist, warum Sie die zweite Zeile mit einem Zeilenumbruch — nicht brechen können, würde es als Text interpretiert werden. Als nächstes definieren wir \[email protected]
, um zwei Argumente zu nehmen, die mit einer neuen Zeile enden; Es wird erweitert, indem das erste Argument (das Sie in geschweiften Klammern übergeben) übergeben und als Argument an die dialogue
-Umgebung übergeben wird und das zweite Argument (alles nach dem ersten und vor dem Ende der Zeile) als Rumpf der Umgebung übergeben wird. Schließlich beendet \[email protected]
die in \dialogueline
geöffnete Gruppe, so dass die Änderung des Catcodes von ^^M
nirgendwo anders sichtbar ist. Angesichts dieser können Sie schreiben
\dialogueline{Johnny} Some dialogue.
\dialogueline{Jane} I see.
und alles sollte funktionieren.
Je nachdem, welchen Editor Sie verwenden, sollten Sie sich auch ein Snippets-Paket ansehen. – Mica
+1 Dies ist eine wirklich interessante Frage – Geoff