Cómo sangrar una oración larga en un algoritmo

Cómo sangrar una oración larga en un algoritmo

ingrese la descripción de la imagen aquí

En este formato de algoritmo, quiero que "Considerando el jésimo..." tenga la misma sangría incluso en la nueva línea.

El código es el siguiente:

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

Respuesta1

Puedes usartabularxpara calcular el ancho de un cuadro que cabría hasta el final de la línea:

ingrese la descripción de la imagen aquí

\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>}establece su contenido en un tabularxque está alineado en la [t]operación dentro de una Xcolumna. El ancho de esta columna es la diferencia de una sangría de línea regular \linewidthmenos la sangría de línea del algoritmo actual.

Respuesta2

Si uno puede vivir con el salto de línea manual, entonces a \Longunderstack[l]{}es una opción

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

ingrese la descripción de la imagen aquí

información relacionada