Modo matemático LaTeX en entorno algorítmico

Modo matemático LaTeX en entorno algorítmico

El siguiente código funciona bien:

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

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

Sin embargo, si lo reemplazo $...$con \(...\), aparece un error por algún motivo. Entonces el siguiente código no funciona:

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

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

Pensé $...$y \(...\)son equivalentes. ¿Por qué puede estar pasando esto? Gracias.

Respuesta1

La \Callmacro utiliza \ifthenelse, que tiene una característica muy útil: permite combinar pruebas con conectivos de lógica proposicional (llamados \ANDy \OR) con paréntesis para indicar la precedencia. ¡Aquí está el truco! Los símbolos de estos paréntesis son \(y \). Entonces, la presencia de \(y \)en el segundo argumento de \Call(que se usa en una \ifthenelse{\equal{#2}{}}prueba durante el procesamiento if \Call) confunde a TeX, porque en el momento de esta evaluación \(y\) no lo sonlos delimitadores de las fórmulas matemáticas, sino los “paréntesis de lógica proposicional”.

Entonces, usa $.

Solución alternativa:

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

Esto funciona porque xifthenintroduce una nueva \isemptyprueba que no interpreta su argumento. Por supuesto, también otras algpseudocodemacros necesitarían un tratamiento similar.

información relacionada