算法包中的缩进

算法包中的缩进

我在算法包中有一个重命名的命令:

\usepackage{algpseudocode,algorithm,algorithmicx}
\algrenewcommand\algorithmicrequire{\textbf{Launch:}}

我喜欢它的外观,没有数字,也没有缩进。

然而,我想到了一个新的案例,我想在行上有一些缩进(但仍然没有行号)。

我尝试添加\hspace,但只添加空格发射:,之前没有。我怎样才能缩进该行?

梅威瑟:

\documentclass[11pt]{report}
\usepackage{algpseudocode,algorithm,algorithmicx}
\algrenewcommand\algorithmicrequire{\textbf{Launch:}}
\algrenewcommand\algorithmicensure{\textbf{End Kernel}}

\begin{document}
\begin{algorithm}

\begin{algorithmic}[1]
\Require{stuff 1} % this is OK
\For{for}
\State{loremIpsum()}
\Require{Unindented stuff 2}  % This is what I want to indent to the same level as the previous line

\State{loremIpsum} % indent also, but I can \qquad
\Ensure{} %  This is what I want to indent also

\EndFor
\Ensure{} % this is OK also
\end{algorithmic}

\end{algorithm}
\end{document}

答案1

这是一个应该能给出想要的结果的版本(如果我正确理解了要求的话)。

\documentclass[11pt]{article}
\usepackage{algpseudocode,algorithm,algorithmicx}

\makeatletter
\def\ALG@special@indent{%
    \ifdim\ALG@thistlm=0pt\relax
        \hskip-\leftmargin
    \else
        \hskip\ALG@thistlm
    \fi
}
\newcommand{\Launch}[1]{\item[]\noindent\ALG@special@indent \textbf{Launch:}\ #1}
\newcommand{\EndKernel}{\item[]\noindent\ALG@special@indent \textbf{End Kernel}}
\makeatother

\begin{document}
\begin{algorithm}
\begin{algorithmic}[1]
\Launch{stuff 1}
\For{for}
  \State{loremIpsum()}
  \Launch{Unindented stuff 2}
  \State{loremIpsum}
  \EndKernel
\EndFor
\EndKernel
\end{algorithmic}

\end{algorithm}
\end{document}

example output

我添加了新的命令\Launch并使\EndKernel代码更具可读性,因为我假设您只是使用了其他名称,因为输出看起来与您想要的有些相似。

这两个命令都只是插入没有行号的简单行(如\Statex),但对缩进特别注意。如果其中一个命令出现在顶层,则不添加缩进;如果它出现在另一个块内的某个地方,则使用当前块缩进。

相关内容