Innerhalb eines komplexeren Befehls benötige ich die expl3-Syntax. Im folgenden Beispiel wird der Ausdruck, der im mathematischen Modus unter der Unterklammer stehen soll, stattdessen dahinter gesetzt, da offenbar der Unterstrich nicht wie gewünscht interpretiert wird. Ich weiß, dass der Unterstrich innerhalb der expl3-Syntax eine geänderte Bedeutung hat, jedoch nicht, wie ich ihm seine ursprüngliche Bedeutung wiedergeben kann.

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \Unterklammer {m m}
{
\underbrace{#1}_{#2}
}
\ExplSyntaxOff
\begin{document}
Direkt eingegebener mathematischer Ausdruck mit Unterklammer:
\[\underbrace{x^2+4}_{f(x)}\]
Mittels xparse-Befehl eingegebener mathematischer Ausdurck mit Unterklammer:
\[\Unterklammer{x^2+4}{f(x)}\]
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Das Minimalbeispiel funktioniert zwar, wenn \ExplSyntaxOn und \ExplSyntaxOff auskommentiert werden, jedoch werden diese Befehle im realen Zusammenhang benötigt.

gefragt 22 Mär '16, 13:48

Cletus's gravatar image

Cletus
1.6k75867
Akzeptiert-Rate: 75%


Ich würde gar nicht versuchen, dem Unterstrich wieder seine „ursprüngliche“ Bedeutung (also Kategorie-Code 8) zu geben, sondern auf die verfügbaren Alternativen zugreifen. LaTeX definiert (in latex.ltx)

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\let\sp=^
\let\sb=_
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

was bedeutet, dass man in Makros jederzeit auf \sb bzw. \sp zurückgreifen kann. expl3 hat für beide Token auch generische Tokens:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\c_math_superscript_token
\c_math_subscript_token
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Beide Alternativen dürften in Deinem Fall funktionieren:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\cs_new:Npn \my_math_command:nn #1#2
{ {#1} \sb {#2} }
\cs_new:Npn \my_other_math_command:nn #1#2
{ {#1} \c_math_subscript_token {#2} }
\NewDocumentCommand \mathone {mm}
{ \my_math_command:nn {#1} {#2} }
\NewDocumentCommand \mathtwo {mm}
{ \my_other_math_command:nn {#1} {#2} }
\ExplSyntaxOff
\begin{document}
$\mathone{a}{b}$
$\mathtwo{a}{b}$
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

PS: beachte, dass ich im Beispiel auf die in l3 erwünschte Trennung von Dokumentenebene und Codeebene Rücksicht genommen habe. Das heißt hier konkret: für jeden Befehl auf Dokumentenebene gibt es eine entsprechende Funktion der Codeebene, mit der der Dokumentenbefehl definiert wird.

Permanenter link

beantwortet 22 Mär '16, 19:50

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×13
×7
×6

gestellte Frage: 22 Mär '16, 13:48

Frage wurde gesehen: 7,015 Mal

zuletzt geändert: 22 Mär '16, 19:50