Seite 1 von 1

Sonderzeichen | als Befehl

Verfasst: Mo 23. Feb 2015, 09:43
von dknof
Hallo,

ich möchte einen Befehl, der das Zeichen | durch andere LaTeX-Befehle ersetzt, aber nur in diesem Befehl. Das Problem dabei ist, dass das Argument von meinem Befehl \A erst beim Aufruf von \A ausgewertet werden darf. Mit \catcode und \scantokens schaffe ich es auch ziemlich gut:
\documentclass{scrartcl}

\newcommand{\A}[1]{% Ersetze | durch Zeilenumbruch
\begingroup
\catcode`\|=\active
\scantokens{\def|{\\}}%
\scantokens{#1}%
\endgroup
}

\begin{document}
A | B

0. Text \\ Zweite Zeile

\A{1. Text | Zweite Zeile}

\newcommand{\test}{2. Text | Zweite Zeile}
\A{\test}

A | B
\end{document}
Der erste Aufruf (1. Text) funktioniert, der zweite (2. Text) aber nicht. Im zweiten Aufruf übergebe ich dem Befehl \A nicht direkt den Text als Argument sondern einen anderen Befehl, der den Text enthält. Genau dies benötige ich aber. Hat jemand eine Idee, wie der Befehl \A verbessert werden kann?

Vielen Dank
Diether

Verfasst: Mo 23. Feb 2015, 10:34
von u_fischer
\scantokens\expandafter{#1}%

Wobei ich splitten von Tokenlisten eher mit expl3 machen würde:
\documentclass{scrartcl}
\usepackage{expl3}
\ExplSyntaxOn
\seq_new:N \l_mylist_seq
\cs_generate_variant:Nn \seq_set_split:Nnn {Nno}

\newcommand{\A}[1]{% Ersetze | durch Zeilenumbruch
 \seq_set_split:Nno \l_mylist_seq {|} {#1}
 \seq_use:Nnnn\l_mylist_seq{\\}{\\}{\\}
}
\ExplSyntaxOff

\begin{document}
A | B

0. Text \\ Zweite Zeile

\A{1. Text | Zweite Zeile}

\newcommand{\test}{2. Text | Zweite Zeile}
\A{\test}

A | B
\end{document}

Verfasst: Mo 23. Feb 2015, 10:45
von dknof
Danke für die schnelle Antwort Ulrike.
Ich werde „meine“ Lösung verwenden, die LaTeX3-er Lösung verstehe ich so nicht, da ich mich mit LaTeX3 noch nicht beschäftigt habe. Ich nehme mir dies zum Anlass, zumindest die Dokumentation zu expl3 durchzuarbeiten.

Gruß
Diether

Verfasst: Mo 23. Feb 2015, 11:08
von u_fischer
Die Dokumentation ist lang ;-). Wenn man aber erst das Grundprinzip verstanden hat (die Benennung der Variablen, die Unterteilung der Abschnitte und welche Befehle normalerweise angeboten werden), dann findet man eigentlich immer was man sucht - es ist unglaublich angenehm, weil man nicht dauernd \expandafter usw abzählen muss.