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

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

gefragt 22 Mär, 08:48

Cletus's gravatar image

Cletus
995126
Akzeptiert: 71%


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
\let\sp=^
\let\sb=_

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
\c_math_superscript_token
\c_math_subscript_token

Beide Alternativen dürften in Deinem Fall funktionieren:

Open in Online-Editor
\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}

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, 14:50

Clemens's gravatar image

Clemens
19.0k112960

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×8
×5
×2

Frage gestellt: 22 Mär, 08:48

Frage wurde angeschaut: 547 Mal

Zuletzt aktualisiert: 22 Mär, 14:50