向 \WHILE 添加数学注释时未定义控制序列

向 \WHILE 添加数学注释时未定义控制序列

我对 (La)TeX 还很陌生,所以如果这个问题很愚蠢,请原谅我 :)

algorithm我有一个用和包排版的算法algorithmic

然后我在算法中得到了这个:

\WHILE[growingPhase returns $topK \eq \emptyset$ \OR $\sum_{u_i^-} > k^{th}score$]
{$\exists S_i$ such that $S_i \neq \emptyset$ \AND $growingPhase()$}

这给了我一个未定义的控制序列错误。没有注释的同一行可以正常工作:

\WHILE{$\exists S_i$ such that $S_i \neq \emptyset$ \AND $growingPhase()$}

另外,另一个 while 可以很好地处理评论:

\WHILE[latice.maxUpperBound is the largest upper bound among the objects in the latice when fullUpdate() or lightUpdate() was last called]
{$\exists S_i$ such that $S_i \neq \emptyset$ \AND $latice.maxUpperBound > k^{th}score$}

所以我很确定不是评论,而是数学或\OR评论中的内容造成了问题......

一个最小(非)工作示例是:

\documentclass[twoside,11pt,openright]{report}

\usepackage[utf8]{inputenc}
\usepackage[danish]{babel}
\usepackage{a4}
\usepackage{latexsym}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{epsfig}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[labeled]{multibib}
\usepackage{color}
\usepackage{datetime}
\usepackage{epstopdf}
\usepackage{subfig}
\usepackage{algorithm}
\usepackage{algorithmic}

\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\renewcommand{\algorithmicforall}{\textbf{for each}}
\renewcommand{\algorithmiccomment}[1]{\hfill// \textit{#1}}

\algsetup{linenosize=\tiny}
\captionsetup[algorithm]{font={scriptsize}}

\begin{document}

\begin{algorithm}
\begin{algorithmic}[1]
\WHILE[growingPhase returns $topK \eq \emptyset$ \OR $\sum_{u_i^-} > k^{th}score$]{$\exists S_i$ such that $S_i \neq \emptyset$ \AND $growingPhase()$}
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}

(在宏中使用时,注释也会出现同样的错误\COMMENT{}。)

答案1

您的 MWE 缺少\STATE命令。否则,唯一的错误是\eq未定义。您应该只写=

\documentclass{report}

\usepackage{subfig}
\usepackage{algorithm}
\usepackage{algorithmic}

\renewcommand{\algorithmiccomment}[1]{\hfill// \textit{#1}}

\algsetup{linenosize=\tiny}
\captionsetup[algorithm]{font={scriptsize}}

\begin{document}

\begin{algorithm}
\begin{algorithmic}[1]
\WHILE[growingPhase returns $\mathit{topK} = \emptyset$ \OR $\sum_{u_i^-} >
      k^{th}\mathit{score}$]
{$\exists S_i$ such that $S_i \neq \emptyset$ \AND $\mathit{growingPhase()}$}
\STATE something
\ENDWHILE
\end{algorithmic}
\end{algorithm}
\end{document}

其中包括@egreg 建议添加\mathit用于多字母标识的。正如他所说,考虑使用k\text{-th}(或k\mbox{-th}不使用amsmath)代替上标。

相关内容