알고리즘2e 옵션 algonl과 boxed가 충돌하는 것 같습니다.

알고리즘2e 옵션 algonl과 boxed가 충돌하는 것 같습니다.

나는 제안한 솔루션을 사용하고 있습니다C. 피오리오~에Algorithm2e 알고리즘에서 Knuth 스타일 줄 번호 매기기를 원합니다.. 제안은 다음을 사용하는 것이 었습니다.알곤Knuth 스타일 알고리즘 라인 번호 매기기를 달성하기 위한 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을 보여주는 출력

관련 정보