Ich habe ein Problem damit, große Textkommentare algorithmisch zu schreiben. Der zweite Kommentar beginnt mit 0-Padding aus der Anweisungsindizierung. Gibt es eine Lösung, um den Beginn der zweiten Kommentarzeile auf der Ebene der ersten zu erzwingen? So sieht es aus.
Einfügen des Codeanfangs bis zur Problemzeile. Der gesamte Code ist ziemlich groß.
\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{В случае, когда строка находится среди строк, которые должны быть выбраны, матрица либо содержит нули, либо неправильной структуры.}
Antwort1
Sie können linegoal
definieren, \Longcomment
um Kommentare unterzubringen, die nicht in die Zeile passen.
Der \tpd
Trick ist alt und gewährleistet einen gleichmäßigen Abstand zwischen den Zeilen.
Ich glaube, das wird auch mit funktionieren breakablealgorithm
.
Bitte beachten Sie die Behandlung mehrbuchstabiger Variablen wie „Rang“.
\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}