我正在寻找一个可以让我编写算法伪代码的软件包。伪代码可能包含数学符号,如
\forall
和\in
下标。但我还想在我的文本中“谈论”伪代码中包含的变量,这样就可以说“在图中...变量foobar
对应...”,并使单词foobar
具有与伪代码示例中相同的外观。
我发现使用该listings
包,我可以通过使用添加数学符号:\begin{lstlisting}[mathescape]
。这个包的问题是我不知道如何让一个单词具有与里面出现的单词相同的外观\begin{lstlisting} ... \end{lstlisting}
。
有什么想法可以做到这一点吗?或者也许有其他可以帮助解决上述问题的软件包?
答案1
环境lstlisting
是“列表“ 包裹。
除了提供列表环境(\begin{lstlisting}
)和从文件导入代码的命令(\lstinputlisting
)之外,它还提供了内联突出显示代码的命令:\lstinline
。
请注意,这\lstinline
有一些限制(并且不遵守所有的选项lstset
)
答案2
使用以下任一algorithm2e
,algorithmic
或者algorithmicx
允许您使用自己的变量和关键字定义来排版伪代码。下面是一个使用algpseudocode
(由 提供algorithmicx
)的小示例:
\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\newcommand{\var}[1]{{\ttfamily#1}}% variable
\begin{document}
\begin{algorithm}[t]
\caption{Euclid’s algorithm}\label{euclid}
\begin{algorithmic}[1]
\Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$ and \var{foobar}\label{foobar}
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}
In Algorithm~\ref{euclid}, variable \var{foobar} (in line~\ref{foobar}), corresponds to\ldots
\end{document}
由于环境的内容algorithmic
是按原样处理的,因此其内部的格式化在很大程度上留给了用户。因此,可以使用内部/外部等效排版的宏轻松完成“变量格式化” algorithmic
。上面的示例定义了\var{<variable>}
以打字机字体设置其内容。