
Ich möchte unterschiedliche Matrizenstile verwenden, wenn TeX in einer align*
-Umgebung oder in einer normalen mathematischen Umgebung ist. Ich habe bereits eine Lösung gefunden, um zu prüfen, ob es sich im mathematischen Modus ( \ifmmode
) befindet, aber keine, um zu prüfen, ob es sich in einer befindet align
. Bisher würde mein Code folgendermaßen aussehen:
\newcommand\cvec[1]{
\relax\ifmmode\begin{smallmatrix}#1\end{smallmatrix}\else\begin{pmatrix}#1\end{pmatrix}\fi}
Oder gibt es einen anderen einfachen Befehl, um dies zu tun?
Antwort1
Ich würde ein solches Vorgehen vermeiden. Matrizen in Inline-Formeln sollten sehr sparsam verwendet werden, denn sobald eine Formel smallmatrix
mehr als zwei Zeilen hat, geht die Äquidistanz zwischen den Grundlinien verloren.
Das amsmath
Paket bietet \ifinalign@
und \ifingather@
, so dass Ihr Ziel erreicht werden kann durch
\makeatletter
\newcommand\cvec[1]{%
\relax
\ifinalign@
\expandafter\@firstoftwo
\else
\ifingather@
\expandafter\expandafter\expandafter\@firstoftwo
\else
\expandafter\expandafter\expandafter\@secondoftwo
\fi
\fi
{\begin{pmatrix}#1\end{pmatrix}}%
{\left(\begin{smallmatrix}#1\end{smallmatrix}\right)}%
}
\makeatother
aber das \cvec
Makro funktioniert in equation
oder nicht wie erwartet multline
. Beachten Sie, dass align
und nicht als Ersatz für ( in allen Fällen mit oder ohne), sondern nur für mehrzeilige Anzeigen gather
verwendet werden sollten .equation
*
\cvec
Die einzige Möglichkeit , in all diesen Fällen eine ordnungsgemäße Funktion sicherzustellen, ist die Verwendung von \mathchoice
:
\newcommand{\cvec}[1]{%
\mathchoice{\begin{pmatrix}#1\end{pmatrix}}
{\left(\begin{smallmatrix}#1\end{smallmatrix}\right)}
{\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
{\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
}
Vollständiges Beispiel
\documentclass{article}
\usepackage{amsmath}
\newcommand{\cvec}[1]{%
\mathchoice{\begin{pmatrix}#1\end{pmatrix}}
{\left(\begin{smallmatrix}#1\end{smallmatrix}\right)}
{\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
{\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
}
\begin{document}
$\cvec{a\\b}$
\begin{align}
\cvec{a\\b}
\end{align}
\begin{gather}
\cvec{a\\b}
\end{gather}
\begin{equation}
\cvec{a\\b}
\end{equation}
\begin{multline}
x\\\cvec{a\\b}
\end{multline}
\end{document}
Versuchen Sie es mit der obigen Definition und Sie werden sehen, dass in den Gleichungen 3 und 4 die Ausgabe mit a erfolgen würde smallmatrix
.
Mein Vorschlag ist, ein Makro mit einer -Variante zu definieren *
, sodass das Sternchen einfach hinzugefügt oder gelöscht werden kann.
\makeatletter
\newcommand{\cvec}{\@ifstar{\thomas@scvec}{\thomas@cvec}}
\newcommand{\thomas@scvec}[1]{%
\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
\newcommand{\thomas@cvec}[1]{\begin{pmatrix}#1\end{pmatrix}}
\makeatother
Alternativ mit xparse
,
\usepackage{xparse}
\NewDocumentCommand{\cvec}{ s m }{%
\IfBooleanTF{#1}
{\text{$\left(\begin{smallmatrix}#1\end{smallmatrix}\right)$}}
{\begin{pmatrix}#1\end{pmatrix}}%
}
Sie verwenden es \cvec*
für den Inline-Modus und \cvec
für den Anzeigemodus. Sie können es weglassen, \text
wenn Sie es nicht \cvec*
in tiefgestellten/hochgestellten Zeichen verwenden möchten.
Antwort2
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\makeatletter
\begin{align}
\ifinalign@ true \else false \fi
\end{align}
\[
\ifinalign@ true \else false \fi
\]
\end{document}