
다음 코드는 정상적으로 작동합니다.
\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
매크로에도 비슷한 처리가 필요합니다.