Sonderzeichen | als Befehl

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Sonderzeichen | als Befehl

von u_fischer » Mo 23. Feb 2015, 11:08

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.

von dknof » Mo 23. Feb 2015, 10:45

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

von u_fischer » Mo 23. Feb 2015, 10:34

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

Sonderzeichen | als Befehl

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

Nach oben