알고리즘에서 큰 텍스트 댓글을 작성하는 데 문제가 있습니다. 두 번째 like는 명령문 인덱싱에서 0 패딩으로 시작합니다. 첫 번째 수준에서 두 번째 주석 줄을 강제로 시작하는 솔루션이 있습니까? 여기 어떻게 생겼나요?
문제 줄까지 코드 시작을 삽입합니다. 전체 코드는 꽤 큽니다.
\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
.
"순위"와 같은 다중 문자 변수의 처리에 유의하십시오.
\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}