使用 algorithmicx-package 在较长的 Ensure-block 中保持缩进

使用 algorithmicx-package 在较长的 Ensure-block 中保持缩进

我的算法中有一个很长的“Ensure-block”。如何才能强制第二行恰好位于第一个“Text”下方?

\documentclass{article}

\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

\begin{document}

\begin{algorithm}[t]
\begin{algorithmic}[1]
\Ensure{Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text}
\State bla
\end{algorithmic}
\end{algorithm}

\end{document}

在此处输入图片描述

答案1

这是实现您所追求的目标的一种方法:

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm,lipsum}
\usepackage[noend]{algpseudocode}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}

\makeatletter
\newcommand{\setensurelength}{%
  \settowidth{\@tempdima}{\algorithmicensure}%
  \setlength{\@tempdima}{\dimexpr\linewidth-\@tempdima-1em+\@totalleftmargin}}
\newcommand{\setrequirelength}{%
  \settowidth{\@tempdima}{\algorithmicrequire}%
  \setlength{\@tempdima}{\dimexpr\linewidth-\@tempdima-1em+\@totalleftmargin}}
\newcommand{\ensurebox}[1]{%
  \setensurelength%
  \parbox[t]{\@tempdima}{\strut #1\strut}}
\newcommand{\requirebox}[1]{%
  \setrequirelength%
  \parbox[t]{\@tempdima}{\strut #1\strut}}
\makeatother
\begin{document}

\makeatletter
\begin{algorithm}[t]
  \begin{algorithmic}[1]
    \Ensure \ensurebox{\lipsum*[2]}
    \Require \requirebox{\lipsum*[2]}
    \State bla
  \end{algorithmic}
\end{algorithm}
\makeatother

\end{document}

这个想法是将确保/要求块设置在\parbox固定宽度内。固定宽度由列表确定 - 是的,algorithmic环境实际上是一个列表 - 通过删除某些组件的长度。旨在1em模拟(较大的)水平空间,足以缩短段落块以适合边距。

相关内容