使用 algpseudocode 和 noend 的虚假空白

使用 algpseudocode 和 noend 的虚假空白

我目前正在排版一些伪代码,到目前为止,我对这个algorithmicx包和algpseudocode命令集非常满意。但是,我现在想使用noend省略end行的选项。这可行,但不幸的是会引入额外的空格(参见下面示例中的第 6 行和第 7 行)。我摆弄了负数\vspaces,但无法得出一个在所有情况下都有效的一致值。

在此处输入图片描述

\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}

在此处输入图片描述

相关内容