アルゴリズムで大きなコメントを書く

アルゴリズムで大きなコメントを書く

アルゴリズムで大きなテキスト コメントを書くときに問題があります。2 番目のコメントは、ステートメントのインデックス付けから 0 パディングで始まります。2 番目のコメント行を 1 番目のレベルから開始するように強制する解決策はありますか? 次のようになります。 ここに画像の説明を入力してください

問題のある行までコードの開始を挿入します。コード全体はかなり大きいです。

\begin{breakablealgorithm}
    \caption{Inverse}\label{alg:inverse}
    \begin{algorithmic}[1]
        \Require Матрица $Z\in \mathbb{Z}_2^{b \times b}$, $S$ - набор неиспользованных столбцов размера $d$, на первой итерации $S$ пуст.
        \Ensure $Z^{\dagger}$, требованиям из предыдущей главы, обновленный набор $S$.
        \State $p \gets$ \text{тривиальная перестановка для матрицы размера $b$}
        \State $d \gets$ Размер перестановки $p$.
        \State $ipiv$  \Comment{Перестановка для финального восстановления $Z^{\dagger}$,  изначально пуста. Новые элементы перестановки добавляются парами вида (индекс, индекс)}.
        \State $D$ \Comment{Массив из пар вида (индекс, Правда/Ложь), необходим для решение системы методов Гаусса в конце алгоритма.}
        \State $R \gets Z$
        \State В $R$ переставить столбцы и строки с индексами из $S$ в начало матрицы, обновить перестановку $p$, в перестановку $ipiv$ добавить пары с соответствующими значениями. 
        \State $rank \gets b$ \Comment{Предполагаем, что матрица $R$ полного ранга}
        \State \textbf{Цель:} найти разложение $Z = P^T R^T D R P$, где $P$ матрица перестановки, $R$ верхне-треугольная матрица размера $r \times b$ c единичной диагональю, $D$ матрица размера $r \times r$. При этом $D$ --- блочно-диагональная матрица, с блоками на диагонали размера $1 \times 1$ или $2 \times 2$. При этом блоки $2 \times 2$ имеют вид $\begin{array}{c|c} 0 & 1  \\ \hline 1 & 0 \end{array}$ или $\begin{array}{c|c} 0 & 1  \\ \hline 1 & 1 \end{array}$
        
        \State $i \gets 0$
        \While{$i < rank$}
            \State Рассмотрим i-тую строку матрицы $R$.
            \State $j \gets$ Индекс ненулевого элемента в i-ой строке начиная с i-того столбца 
            \If{$j \ge rank$}
                \If{$i < d$} \Comment{В случае, когда строка находится среди строк, которые должны быть выбраны, матрица либо содержит нули, либо неправильной структуры.}

答え1

行に収まらないコメントを収容するために、linegoalを定義して を使用できます。\Longcomment

この\tpdトリックは、行間の間隔を均等にする古くからの方法です。

これはでも機能すると思いますbreakablealgorithm

「rank」などの複数文字変数の扱いに注意してください。

\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}
\usepackage{amsmath,amssymb}
\usepackage{algorithm,algpseudocode}
\usepackage{linegoal}

\newlength{\commentwidth}
\newlength{\commentcharwidth}
\newcommand{\Longcomment}[1]{%
  \settowidth{\commentcharwidth}{$\triangleright$ }%
  \setlength{\commentwidth}{\linegoal}%
  \addtolength{\commentwidth}{-\commentcharwidth}%
  \Comment{\parbox[t]{\commentwidth}{#1\par\xdef\tpd{\the\prevdepth}}}%
  \par\nointerlineskip\prevdepth=\tpd
}

\begin{document}

\begin{algorithm}

\caption{Inverse}\label{alg:inverse}

\begin{algorithmic}[1]
  \Require Матрица $Z\in \mathbb{Z}_2^{b \times b}$, $S$ - набор неиспользованных 
           столбцов размера $d$, на первой итерации $S$ пуст.
  \Ensure $Z^{\dagger}$, требованиям из предыдущей главы, обновленный набор $S$.
  \State $p \gets$ \text{тривиальная перестановка для матрицы размера $b$}
  \State $d \gets$ Размер перестановки $p$.
  \State $\mathit{ipiv}$
         \Longcomment{Перестановка для финального восстановления $Z^{\dagger}$,
           изначально пуста. Новые элементы перестановки добавляются парами вида
           (индекс, индекс).}
  \State $D$
         \Longcomment{Массив из пар вида (индекс, Правда/Ложь), необходим для
           решение системы методов Гаусса в конце алгоритма.}
  \State $R \gets Z$
  \State В $R$ переставить столбцы и строки с индексами из $S$ в начало
         матрицы, обновить перестановку $p$, в перестановку $ipiv$ добавить
         пары с соответствующими значениями. 
  \State $\mathit{rank} \gets b$ \Comment{Предполагаем, что матрица $R$ полного ранга}
  \State \textbf{Цель:} найти разложение $Z = P^T R^T D R P$, где $P$ матрица
         перестановки, $R$ верхне-треугольная матрица размера $r \times b$ c
         единичной диагональю, $D$ матрица размера $r \times r$.
         При этом $D$ --- блочно-диагональная матрица, с блоками на диагонали
         размера $1 \times 1$ или $2 \times 2$. При этом блоки $2 \times 2$
         имеют вид $\begin{array}{c|c} 0 & 1  \\ \hline 1 & 0 \end{array}$
         или $\begin{array}{c|c} 0 & 1  \\ \hline 1 & 1 \end{array}$      
  \State $i \gets 0$
  \While{$i < \mathit{rank}$}
    \State Рассмотрим i-тую строку матрицы $R$.
    \State $j \gets$ Индекс ненулевого элемента в i-ой строке начиная с i-того столбца 
    \If{$j \ge \mathit{rank}$}
      \If{$i < d$}
        \Longcomment{В случае, когда строка находится среди строк, которые
          должны быть выбраны, матрица либо содержит нули, либо
          неправильной структуры.}
      \EndIf
    \EndIf
  \EndWhile
\end{algorithmic}

\end{algorithm}

\end{document}

ここに画像の説明を入力してください

関連情報