Algorithmicx imprime el número de la primera línea al numerar cada n-ésima

Algorithmicx imprime el número de la primera línea al numerar cada n-ésima

Al utilizarlo, algorithmicxes bastante fácil activar o desactivar la numeración de líneas o numerar cada enésima línea. Tomando este MWE (tomado del documento)

\documentclass{article}
\usepackage{algpseudocode}
\usepackage{algorithm}
\begin{document}
\begin{algorithm}[H]
\caption{Euclide's algorithm}\label{euclid}
\begin{algorithmic}[5]
\Procedure{Euclide}{$a,b$}\Comment{The g.c.d. of a and b}
   \State $r\gets a\bmod b$
   \While{$r\not=0$}\Comment{We have the answer if r is 0}
      \State $a\gets b$
      \State $b\gets r$
      \State $r\gets a\bmod b$
   \EndWhile\label{euclidendwhile}
   \State \Return $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}

En este ejemplo, la primera línea numerada es la quinta. ¿Hay alguna manera de activar la numeración en la primera línea?

Pregunta posterior, ¿es posible cambiar la numeración en cualquier línea arbitraria?

Respuesta1

Tendrás que actualizar una macro específica para cambiar la condición de impresión:

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{algpseudocode,algorithm}

\makeatletter
\def\ALG@step%
   {%
   \stepcounter{ALG@line}%
   \stepcounter{ALG@rem}%
   \ifnum\value{ALG@line}=1
     % Print line number if it is 1
     \alglinenumber{\arabic{ALG@line}}%
   \else\ifnum\value{ALG@rem}=\ALG@numberfreq
     % Print line number if the ALG@rem = \ALG@numberfreq
     \setcounter{ALG@rem}{0}\alglinenumber{\arabic{ALG@line}}%
   \fi\fi
   }%
\makeatother

\begin{document}
\begin{algorithm}[H]
  \caption{Euclide's algorithm}\label{euclid}
  \begin{algorithmic}[5]
    \Procedure{Euclide}{$a,b$}\Comment{The g.c.d.\ of~$a$ and~$b$}
       \State $r \gets a \bmod b$
       \While{$r \neq 0$}\Comment{We have the answer if~$r$ is~$0$}
          \State $a \gets b$
          \State $b \gets r$
          \State $r \gets a \bmod b$
       \EndWhile\label{euclidendwhile}
       \State \Return $b$\Comment{The g.c.d.\ is~$b$}
    \EndProcedure
  \end{algorithmic}
\end{algorithm}
\end{document}

El ajuste \ALG@stepinserta una condición para verificar si el número de línea es 1 e imprimir en consecuencia.

En general, sería posible activar la numeración en cualquier línea arbitraria, pero el código no está configurado para eso.

información relacionada