알고리즘 환경의 LaTeX Math 모드

알고리즘 환경의 LaTeX Math 모드

다음 코드는 정상적으로 작동합니다.

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

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

$...$하지만 으로 바꾸면 \(...\)어떤 이유에서인지 오류가 발생합니다. 따라서 다음 코드는 작동하지 않습니다.

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

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

나는 생각 $...$하고 \(...\)동등합니다. 왜 이런 일이 일어날 수 있습니까? 감사합니다.

답변1

매크로 는 매우 편리한 기능을 가지고 있는 를 \Call사용합니다 . 즉 , 우선 순위를 명시하기 위해 괄호를 사용하여 명제 논리 접속사( 및 이라고 함)와 테스트를 결합할 수 있습니다. 여기에 문제가 있습니다! 이러한 괄호의 기호는 및 입니다 . 따라서 ( if 처리 중 테스트 에 사용되는 ) 의 두 번째 인수에 and 가 있으면 TeX를 혼동하게 됩니다.\ifthenelse\AND\OR\(\)\(\)\Call\ifthenelse{\equal{#2}{}}\Call\(\) 그렇지 않다수학 공식 구분 기호가 아니라 "명제 논리 괄호"입니다.

따라서 $.

대체 솔루션:

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

이는 인수를 해석하지 않는 xifthen새로운 테스트를 도입하기 때문에 작동합니다 . \isempty물론 다른 algpseudocode매크로에도 비슷한 처리가 필요합니다.

관련 정보