Параметры algorithm2e algonl и boxed, похоже, конфликтуют

Параметры algorithm2e algonl и boxed, похоже, конфликтуют

Я использую решение, предложенноеК. ФиориовХотите нумерацию строк в стиле Кнута в алгоритмах algorithm2e. Было предложено использоватьалгонлопция для algorithm2e для достижения нумерации строк в стиле алгоритма Кнута; т. е. алгоритм № 3 должен иметь строки с номерами 3.1, 3.2, 3.3 и т. д. Однако, кажется, что номер строки выходит за пределы ограничивающей рамки, если я используюупакованный в коробкувариант.

Может ли кто-нибудь предложить хороший способ исправить это, чтобы блок алгоритма не конфликтовал с нумерацией строк?

Вот что я вижу в результате. введите описание изображения здесь

Вот минимальный рабочий пример.

\documentclass{article}

\usepackage[noend,boxed,linesnumbered,algonl]{algorithm2e}
\SetKwProg{Fn}{Function}{}{end}

\begin{document}

\begin{algorithm}[H]\label{algo.find.augmenting.path}
  \caption{Implementation of function to find an augmenting path if one exists.}
  \DontPrintSemicolon
  \Fn{find-augmenting-path-or-none$(adj,E,M)$}{
    \SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
    \Input{$adj$ adjacency list of simple graph}
    \Input{$E$ set of edges}
    \Input{$M$ a matching}
    \BlankLine
    $free \gets $ generate-free-vertices() \;
    \If{$|free| < 2$}{
      \Return None \;
    }
    \tcp*[l]{Find set of length=2 paths starting at a free vertex}
    $paths \gets \{[u,v] \mid u\in free, \{u,v\} \in E  \}$\label{algo.line.paths.1b}\;
    $k \gets 1$  \tcp*{index of 2nd element of 0-index-based array}
    \While{$paths \neq \emptyset$}{
      \If{odd$(k)$}{
        \For{$p \in paths$}{
          \If{ $p_k \in free$ }{
            \Return p\;
          }
        }
      }
      $paths \gets$ extend-alternating-path$(adj,M,k,free,paths)$ \;
      $k \gets k+1$ \;
    }
    \Return None
  }
\end{algorithm}

\end{document}

решение1

Установка большего значения \algomarginрешает проблему. Вы можете

  • напрямую установить \setlength\algomargin{3em}или
  • используйте \IncMargin{<length>}для добавления <length>к \algomargin.

Смотритедокументацияalgorithm2e, раздел 9.6.

В качестве альтернативы вы можете

Полный пример

\documentclass{article}

\usepackage[noend,boxed,linesnumbered,algonl]{algorithm2e}
\SetKwProg{Fn}{Function}{}{end}

\setlength\algomargin{3em}

\begin{document}

\begin{algorithm}[H]\label{algo.find.augmenting.path}
  \caption{Implementation of function to find an augmenting path if one exists.}
  \DontPrintSemicolon
  \Fn{find-augmenting-path-or-none$(adj,E,M)$}{
    \SetKwInOut{Input}{Input}\SetKwInOut{Output}{Output}
    \Input{$adj$ adjacency list of simple graph}
    \Input{$E$ set of edges}
    \Input{$M$ a matching}
    \BlankLine
    $free \gets $ generate-free-vertices() \;
    \If{$|free| < 2$}{
      \Return None \;
    }
    \tcp*[l]{Find set of length=2 paths starting at a free vertex}
    $paths \gets \{[u,v] \mid u\in free, \{u,v\} \in E  \}$\label{algo.line.paths.1b}\;
    $k \gets 1$  \tcp*{index of 2nd element of 0-index-based array}
    \While{$paths \neq \emptyset$}{
      \If{odd$(k)$}{
        \For{$p \in paths$}{
          \If{ $p_k \in free$ }{
            \Return p\;
          }
        }
      }
      $paths \gets$ extend-alternating-path$(adj,M,k,free,paths)$ \;
      $k \gets k+1$ \;
    }
    \Return None
  }
\end{algorithm}

\end{document}

вывод, показывающий больше \algomargin

Связанный контент