我是 Latex 的真正初学者,现在我正在努力使用算法包和 algpseudocode 编写一些代码。到目前为止,我所做的是:
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{algorithm}
\caption{My algorithm doing something....}
\begin{algorithmic}
\Function{findSomething}{$x, y$} \\
\(current\_value \gets 0\) \\
\(value\_found \gets false\)
\While{\(value\_found \neq true\)}
\If{......}
% DO something, doesn't matter \And % WHERE I TRIED THE And command
.......
\EndIf
\EndWhile \\
\Return \(x\)
\EndFunction
\end{algorithmic}
\end{algorithm}
现在我想使用“and、or、to”之类的命令,但在这里它们不起作用,这可能是我加载的另一个包吗?但我的第二个问题是,我发现我可以定义如下命令:
\algnewcommand{\Or}{\textbf{or}}
但是当我使用 \Or 时,最终的 pdf 上没有任何内容:S。或者当我尝试定义:
\algnewcommand{\And}{\textbf{and}}
Latex 告诉我该命令已经存在,但是当我尝试在我的代码中使用它(在示例中标记)时,我收到该命令不可用的错误,:S
答案1
定义\And
和\Or
按您建议的方式工作,如您在以下示例中所见。但是,您应该使用\State
:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\algnewcommand{\Or}{\textbf{or}}
\algnewcommand{\And}{\textbf{and}}
\begin{document}
\begin{algorithm}
\begin{algorithmic}
\Function{findSomething}{$x, y$}
\State \(current\_value \gets 0\)
\State \(value\_found \gets false\)
\While{\(value\_found \neq true\)}
\If{......}
% DO something, doesn't matter \And % WHERE I TRIED THE And command
\State A \And{} B
\EndIf
\EndWhile
\State \Return \(x\)
\EndFunction
\end{algorithmic}
\end{algorithm}
\end{document}
algorithmicx 软件包文档中的一段引文(http://mirrors.ctan.org/macros/latex/contrib/algorithmicx/algorithmicx.pdf):
一行简单的文本以 \State 开头。此宏标记每行的开头。您不需要在包中定义的命令前使用 \State,因为这些命令会自动使用新行。
对于伪代码中的逻辑和/或运算符,我个人使用\land
或\lor
。通常您应该使用 algpseudocode 中定义的命令。to
在我看来,通常不是伪代码中的命令,但可能用于 for 循环的第一行。同样,您可以使用algnewcommand
来定义to
命令。如果您想排版注释,您可能需要使用\State \Comment And or to...
。