我的算法中有一个很长的“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
模拟(较大的)水平空间,足以缩短段落块以适合边距。