LaTeX Math Mode em ambiente algorítmico

LaTeX Math Mode em ambiente algorítmico

O código a seguir funciona bem:

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

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

No entanto, se eu substituir $...$por \(...\), recebo um erro por algum motivo. Portanto o código a seguir não funciona:

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

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

Eu pensei $...$e \(...\)são equivalentes. Por que isso pode estar acontecendo? Obrigado.

Responder1

A \Callmacro utiliza \ifthenelse, que possui um recurso muito útil: permite combinar testes com conectivos lógicos proposicionais (chamados \ANDe \OR) com parênteses para indicar a precedência. Aqui está o problema! Os símbolos para esses parênteses são \(e \). Portanto, a presença de \(e \)no segundo argumento de \Call(que é usado em um \ifthenelse{\equal{#2}{}}teste durante o processamento if \Call) confunde o TeX, porque no momento desta avaliação \(e\) não sãoos delimitadores das fórmulas matemáticas, mas sim os “parênteses lógicos proposicionais”.

Então, use $.

Solução 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}

Isso funciona porque xifthenintroduz um novo \isemptyteste que não interpreta seu argumento. É claro que outras algpseudocodemacros também precisariam de tratamento semelhante.

informação relacionada