Überprüfen Sie, ob in einer align*-Umgebung

Überprüfen Sie, ob in einer align*-Umgebung

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 smallmatrixmehr als zwei Zeilen hat, geht die Äquidistanz zwischen den Grundlinien verloren.

Das amsmathPaket 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 \cvecMakro funktioniert in equationoder nicht wie erwartet multline. Beachten Sie, dass alignund nicht als Ersatz für ( in allen Fällen mit oder ohne), sondern nur für mehrzeilige Anzeigen gatherverwendet werden sollten .equation*

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

Bildbeschreibung hier eingeben

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 \cvecfür den Anzeigemodus. Sie können es weglassen, \textwenn 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}

verwandte Informationen