![如何在算法中缩进长句子](https://linux22.com/image/335573/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%AE%97%E6%B3%95%E4%B8%AD%E7%BC%A9%E8%BF%9B%E9%95%BF%E5%8F%A5%E5%AD%90.png)
在这个算法格式中,我希望“考虑第 j 个....”即使在换行符中也具有相同的缩进。
代码如下:
\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother
\begin{document}
\begin{algorithm}
\caption{hello}\label{euclid}
\begin{algorithmic}[1]
\Procedure{ASAPP}{}
\State $\textit{i} \gets \text{0}$, $\textit{j} \gets \text{0}$, $\textit{k} \gets \text{0}$
\While {i $\leq$ nom}
\While {j $\leq C_{i}$}
\State Considering the \textit{j}th edge of the \textit{i}th metabolite, \textit{x} and \textit{y} contains the vertices of the \textit{j}th edge
\State $\textit{k} \gets \text{\textit{j} + 1}$
\While { k $\leq C_{i}$}
\State Considering the \textit{k}th edge of the \textit{i}th metabolite, \textit{x1} and \textit{y1} contains the vertices of the \textit{k}th edge.
\EndWhile
\EndWhile
\EndWhile
\BState \emph{top}:
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
答案1
您可以使用tabularx
计算出适合到行尾的框的宽度:
\documentclass{article}
\usepackage{amsmath,algorithm,tabularx}
\usepackage[noend]{algpseudocode}
\makeatletter
\newcommand{\multiline}[1]{%
\begin{tabularx}{\dimexpr\linewidth-\ALG@thistlm}[t]{@{}X@{}}
#1
\end{tabularx}
}
\makeatother
\begin{document}
\begin{algorithm}
\caption{hello}
\begin{algorithmic}[1]
\Procedure{ASAPP}{}
\State $i \gets 0$, $j \gets 0$, $k \gets 0$
\While { $i \leq \text{nom}$ }
\While {$j \leq C_i$ }
\State \multiline{%
Considering the $j$-th edge of the $i$-th metabolite,~$x$ and~$y$
contains the vertices of the $j$-th edge}
\State $k \gets j + 1$
\While { $k \leq C_i$ }
\State \multiline{%
Considering the $k$-th edge of the $i$-th metabolite,~$x_1$ and~$y_1$
contains the vertices of the $k$-th edge.}
\EndWhile
\EndWhile
\EndWhile
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
\multiline{<stuff>}
将其内容设置在与optabularx
对齐的列内。此列的宽度是常规减去当前算法行缩进的差值。[t]
X
\linewidth
答案2
如果你可以忍受手动换行,那么这\Longunderstack[l]{}
是一个选择
\documentclass{article}
\usepackage{amsmath}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{stackengine}
\setstackEOL{\\}
\makeatletter
\def\BState{\State\hskip-\ALG@thistlm}
\makeatother
\begin{document}
\begin{algorithm}
\caption{hello}\label{euclid}
\begin{algorithmic}[1]
\Procedure{ASAPP}{}
\State $\textit{i} \gets \text{0}$, $\textit{j} \gets \text{0}$,
$\textit{k} \gets \text{0}$
\While {i $\leq$ nom}
\While {j $\leq C_{i}$}
\State \Longunderstack[l]{Considering the \textit{j}th edge of the
\textit{i}th metabolite, \textit{x} and \textit{y}\\
contains the vertices of the \textit{j}th edge}
\State $\textit{k} \gets \text{\textit{j} + 1}$
\While { k $\leq C_{i}$}
\State \Longunderstack[l]{Considering the \textit{k}th edge of the
\textit{i}th metabolite, \textit{x1} and \textit{y1}\\
contains the vertices of the \textit{k}th edge.}
\EndWhile
\EndWhile
\EndWhile
\BState \emph{top}:
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}