Sonderzeichen | als Befehl

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


dknof
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: So 29. Jul 2012, 13:30

Sonderzeichen | als Befehl

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4268
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag 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}

dknof
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: So 29. Jul 2012, 13:30

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4268
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag 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.

Antworten