我目前正在排版一些伪代码,到目前为止,我对这个algorithmicx
包和algpseudocode
命令集非常满意。但是,我现在想使用noend
省略end
行的选项。这可行,但不幸的是会引入额外的空格(参见下面示例中的第 6 行和第 7 行)。我摆弄了负数\vspace
s,但无法得出一个在所有情况下都有效的一致值。
\documentclass{article}
\usepackage[noend]{algpseudocode}
\begin{document}
\begin{algorithmic}[1]
\Function{lsolve}{$L$, $b$}
\State $x \gets b$
\For{$j \gets 0$ to $n - 1$}
\State $x_j \gets x_j / l_{jj}$
\ForAll{$i > j$ where $l_{ij} \neq 0$}
\State $x_i \gets x_i - l_{ij} x_j$
\EndFor
\EndFor
\State \Return $x$
\EndFunction
\end{algorithmic}
\end{document}
有什么方法可以修补吗algorithmicx
?或者我是否必须根据具体情况微调伪代码?
答案1
我不确定为什么当包处理不需要打印的结束指令时,它algorithmicx
会这样做而不是什么都不做。\item[]\nointerlineskip
如果我修补相关命令不执行任何操作,则间距是正确的,至少在这种情况下。
\documentclass{article}
\usepackage[noend]{algpseudocode}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\ALG@doentity}{\item[]\nointerlineskip}{}{}{}
\makeatother
\begin{document}
\begin{algorithmic}[1]
\Function{lsolve}{$L$, $b$}
\State $x \gets b$
\For{$j \gets 0$ to $n - 1$}
\State $x_j \gets x_j / l_{jj}$
\ForAll{$i > j$ where $l_{ij} \neq 0$}
\State $x_i \gets x_i - l_{ij} x_j$
\EndFor
\EndFor
\State \Return $x$
\EndFunction
\end{algorithmic}
\end{document}