LaTeX-Mathematikmodus in algorithmischer Umgebung

LaTeX-Mathematikmodus in algorithmischer Umgebung

Der folgende Code funktioniert einwandfrei:

\documentclass{article}
\usepackage{algpseudocode,amsmath}

\begin{document}
\begin{algorithmic}[1]
\State \Call{MergeSort}{$T(1,\dotsc,n)$}
\end{algorithmic}
\end{document}

Wenn ich jedoch $...$durch ersetze \(...\), erhalte ich aus irgendeinem Grund eine Fehlermeldung. Der folgende Code funktioniert also nicht:

\documentclass{article}
\usepackage{algpseudocode,amsmath}

\begin{document}
\begin{algorithmic}[1]
\State \Call{MergeSort}{\(T(1,\dotsc,n)\)}
\end{algorithmic}
\end{document}

Ich dachte $...$, und \(...\)sind gleichwertig. Warum kann das passieren? Danke.

Antwort1

Das \CallMakro verwendet \ifthenelse, das eine sehr praktische Funktion hat: Es ermöglicht die Kombination von Tests mit aussagenlogischen Konnektoren (genannt \ANDund \OR) mit Klammern zur Angabe der Priorität. Und hier ist der Haken! Die Symbole für diese Klammern sind \(und \). Das Vorhandensein von \(und \)im zweiten Argument von (das in einem Test während der Verarbeitung \Callverwendet wird, wenn ) verwirrt TeX, da zum Zeitpunkt dieser Auswertung und\ifthenelse{\equal{#2}{}}\Call\(\) sind nichtdie Trennzeichen der mathematischen Formeln, sondern die „aussagenlogischen Klammern“.

Verwenden Sie also $.

Alternative Lösung:

\documentclass{article}
\usepackage{algpseudocode,amsmath,xifthen}

\algrenewcommand\Call[2]{\textproc{#1}\ifthenelse{\isempty{#2}}{}{(#2)}}%

\begin{document}

\begin{algorithmic}[1]
\State \Call{MergeSort}{\(T(1,\dotsc,n)\)}
\end{algorithmic}
\end{document}

Dies funktioniert, weil xifthenein neuer \isemptyTest eingeführt wird, der sein Argument nicht interpretiert. Natürlich algpseudocodemüssten auch andere Makros ähnlich behandelt werden.

verwandte Informationen