我是 LaTeX 软件包的新手algorithm
,需要帮助弄清楚如何调试下面的 MWE,它给出了六个错误。它看起来很复杂,但一半的错误都是同一件事,而且在一个案例中我显然没有\EndForAll
正确使用,尽管它看起来很直观(而且网上没有关于它的任何信息)。我对这个\end{algorithmic}
错误特别好奇,它说Error: Some blocks are not closed!!!
我在打开的每个块上都提供了End
语句,所以我不明白这个错误是什么。
我将非常感谢您的反馈。
\documentclass[]{article}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\renewcommand{\algorithmicforall}{\textbf{for each}}
\begin{document}
\begin{algorithm}
\caption{algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{myalgo}{}
\State $\textit{things} \gets \textit{stuff}$
\State $g(thing)$ \gets \text{stuff }(\textit{material})$
\Comment{comment}{}
\ForAll{{$stuff$ in $things$}} :
\State \text{Material }(\textit{stuff})
\Comment{stuff}{}
\State \text{\it{k}} = (\textit{stuff}, \textit{things})
\EndForAll
\If {$k$ is good}:
\State $things$
\EndIf
\ForAll{{$things$ in $stuff$}} :
\State $abs\bigg|{stuff} - {things}\bigg|$
\State Material \bigg\{$abs \bigg|{stuff} - {things}\bigg|$\bigg\}
\Comment{Ending}{}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
答案1
没有\EndForAll
,但是\EndFor
。你漏了一个。
您对变量和函数名称的处理也不一致。这是经过编辑的版本,其中包含几个辅助宏。进入和退出数学模式时要小心。
\documentclass[]{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\renewcommand{\algorithmicforall}{\textbf{for each}}
\newcommand{\var}[1]{\mathit{#1}}
\newcommand{\func}[1]{\mathrm{#1}}
\begin{document}
\begin{algorithm}
\caption{algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{myalgo}{}
\State $\var{things} \gets \var{stuff}$
\State $g(\var{thing}) \gets \func{stuff}(\var{material})$
\Comment{comment}{}
\ForAll{$\var{stuff}$ in $\var{things}$}:
\State $\func{Material}(\var{stuff})$
\Comment{stuff}{}
\State $k = (\var{stuff}, \var{things})$
\EndFor
\If {$k$ is good}:
\State $\var{things}$
\EndIf
\ForAll{$\var{things}$ in $\var{stuff}$}:
\State $\func{abs}\big|\var{stuff} - \var{things}\big|$
\State $\func{Material} \bigl\{\func{abs} \big|\var{stuff} - \var{things}\big|\bigr\}$
\Comment{Ending}{}
\EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
请注意,这\bigg
太大了!
答案2
您犯了几个语法错误:
第二
\State
,你$
之后看到了一个虚假的迹象(thing)
。结束命令是
\EndFor
,不是\EndForAll
。
修正后的代码:
\documentclass[]{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\renewcommand{\algorithmicforall}{\textbf{for each}}
\begin{document}
\begin{algorithm}
\caption{algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{myalgo}{}
\State $\textit{things} \gets \textit{stuff}$
\State $g(thing) \gets \text{stuff }(\textit{material})$
\Comment{comment}{}
\ForAll{{$stuff$ in $things$}} :
\State \text{Material }(\textit{stuff})
\Comment{stuff}{}
\State \text{\it{k}} = (\textit{stuff}, \textit{things})
\EndFor
\If {$k$ is good}:
\State $things$
\EndIf
\ForAll{{$things$ in $stuff$}} :
\State $abs\bigg|{stuff} - {things}\bigg|$
\State Material \bigg\{$abs \bigg|{stuff} - {things}\bigg|$\bigg\}
\EndFor
\Comment{Ending}{}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
输出:
texdoc algpseudocode
在终端中使用来访问algorithmicx
系统中该捆绑包的文档。