
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 \Call
Makro verwendet \ifthenelse
, das eine sehr praktische Funktion hat: Es ermöglicht die Kombination von Tests mit aussagenlogischen Konnektoren (genannt \AND
und \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 \Call
verwendet 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 xifthen
ein neuer \isempty
Test eingeführt wird, der sein Argument nicht interpretiert. Natürlich algpseudocode
müssten auch andere Makros ähnlich behandelt werden.