von dknof » Mo 23. Feb 2015, 09:43
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
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:
[code]
\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}
[/code]
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