TeXwelt wurde neu installiert. Es funktionieren noch nicht alle Features und auch an den deutschsprachigen Formulierungen wird verbessert. Danke für eure Geduld.

Kein echtes Problem aber ein für mich merkwürdiges Verhalten ist mir aufgefallen. Folgendes Minimalbeispiel:

Öffne in Overleaf
\documentclass[a4paper]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\newcommand{\test}[1][A]{x^{#1}}

\begin{document}

$\test[\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}]$
\[\test[\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}]\]
\begin{align*}\test[\begin{smallmatrix} 1 \\ 2\end{smallmatrix}]\end{align*}

$\test[\begin{smallmatrix} 1 & 2  \end{smallmatrix}]$
\[\test[\begin{smallmatrix} 1 & 2  \end{smallmatrix}]\]
%\begin{align*}\test[\begin{smallmatrix} 1 & 2 \end{smallmatrix}]\end{align*}
\begin{align*}\test[{\begin{smallmatrix} 1 & 2 \end{smallmatrix}}]\end{align*}
\end{document}

In der align-Umgebung ist es beim zweiten Block notwendig, eine weitere geschweifte Klammer zu setzen, ansonsten wird das Dokument nicht kompiliert. Gibt es einen Grund weshalb die Klammer notwendig ist?

Beispiel mit Matrix als Defaultwert:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\newcommand{\test}[1][A]{x^{#1}}
\newcommand{\testneu}[1][\begin{smallmatrix} 3 & 4\end{smallmatrix}]{x^{#1}}

\begin{document}

%\begin{align*}\test[\begin{smallmatrix} 1 & 2 \end{smallmatrix}]\end{align*}
\begin{align*}\test[{\begin{smallmatrix} 1 & 2 \end{smallmatrix}}]\end{align*}

\begin{align*}\testneu\end{align*}
\[\testneu[\begin{smallmatrix} 1 & 2 \end{smallmatrix}]\]
% \begin{align*}\test[\begin{smallmatrix} 1 & 2 \end{smallmatrix}]\end{align*}
\begin{align*}\testneu[{\begin{smallmatrix} 1 & 2 \end{smallmatrix}}]\end{align*}
\end{document}

gefragt 06 Dez '17, 15:23

Hirshy's gravatar image

Hirshy
6461337
Akzeptiert-Rate: 0%

bearbeitet 07 Dez '17, 07:54


Du hast ein & im optionalen Argument. Wenn du das nicht mit der Klammer schützt, erzeugt es eine neue Zelle der align-Umgebung und alles explodiert.

Permanenter link

beantwortet 07 Dez '17, 00:08

Ulrike%20Fischer's gravatar image

Ulrike Fischer
3.3k23
Akzeptiert-Rate: 53%

D.h. die geschweifte Klammer aus der Definition des Befehls reicht dafür nicht aus? Und wie verhält es sich dann, wenn z.B. ein & im Defaultwert vorkommt (siehe Ergänzung oben)? Da scheint es ja zu funktionieren; wird der Defaultwert anders behandelt als eine Ersetzung?

(07 Dez '17, 07:56) Hirshy
3

[] sind keine Argumentklammern (weshalb man sie auch nicht einfach schachteln kann). Erst, wenn \test expandiert wird, reagiert \test selbst auf die eckige Klammer und ruft dann ein Makro mit einem sogenannten delimited argument auf. Zuvor ist das [ einfach nur ein Zeichen. \test wiederum wird erst expandiert, wenn die Aufteilung am & bereits erfolgt ist. Anders ist es mit Material, das in {} verpackt ist. Das sind sowohl Gruppen- als auch Argumentklammern. Da weiß TeX, dass es sich beim Aufteilen nicht weiter um den Inhalt zu kümmern hat.

(07 Dez '17, 08:12) saputello

Alles klar, danke!

(07 Dez '17, 08:56) Hirshy

Man kann um das Problem herumarbeiten indem man explizite geschweifte Klammern um das & einfügt. Derselbe Trick wir zum Beispiel in tabular verwendet, damit man Tabellen schachteln kann.

Öffne in Overleaf
\documentclass{article}
\usepackage{amsmath}
\newcommand{\test}{{\ifnum`}=0\fi\dotest}
\newcommand{\dotest}[1][A]{x^{#1}\ifnum`{=0\fi}}

\begin{document}

\begin{align*}\test[\begin{smallmatrix} 1 & 2 \end{smallmatrix}]\end{align*}

\end{document}
Permanenter link

beantwortet 10 Dez '17, 07:18

Henri's gravatar image

Henri
14.5k53238
Akzeptiert-Rate: 46%

Deine Antwort
Vorschau umschalten

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

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×16
×12

gestellte Frage: 06 Dez '17, 15:23

Frage wurde gesehen: 1,655 Mal

zuletzt geändert: 10 Dez '17, 07:18