代码很乱,因为我无法在算法中的 for 循环内缩进

代码很乱,因为我无法在算法中的 for 循环内缩进

我的算法中有一个 for 循环,我无法让 latex 正确缩进其中的伪代码。目前情况很乱,它甚至不会将 for 循环中的代码放在单独的行上。

\documentclass[a4paper,12pt,times,numbered,print,index]{Classes/PhDThesisPSnPDF}

\RequirePackage[left=37mm,right=30mm,top=35mm,bottom=30mm]{geometry}
\RequirePackage{libertine} 
\RequirePackage[small,bf]{caption}
\RequirePackage[labelsep=space,tableposition=top]{caption} 
\usepackage{subfig}  
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{braket}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\begin{document}
\begin{algorithm}
\caption{Generate transition matrix for one-dimensional quantum walk}\label{tran_mat_1d_qw}
\begin{algorithmic}[1]
\Procedure{generateTransitionMatrix}{$steps$}
    \State $numElements \gets steps * 4 + 2$
    \State $transitionMat \gets numElements \times numElements$ MATRIX

    \BlankLine
    \State $col \gets 0$
    \For {$i = 1 \to (steps * 2) - 1$}
        \State row \gets i * 2$
        \STATE\hspace{\algorithmicindent} transitionMat[row,      col]        \gets $1$
        \STATE\hspace{\algorithmicindent} transitionMat[row,      col + 1]    \gets $1$
        \STATE\hspace{\algorithmicindent} transitionMat[row + 5,  col]        \gets $1$
        \STATE\hspace{\algorithmicindent} transitionMat[row + 5,   col + 1]   \gets $-1$
    \ENDFOR
\end{algorithmic}
\end{algorithm}
\end{document}

答案1

我不知道如何\BlankLines定义,所以我删除了它。如果您想要一个未编号的空行,请使用\Statex

您的代码存在许多问题。

  • \gets必须置于数学模式中,即它需要位于一对美元符号内。当在数学模式之外时,会产生错误missing $ inserted

  • 在 for 循环的第一个部分中,\State您忘记了开头$,而只有行末的那个。

  • 宏区分大小写,这\State意味着不是与 相同\STATEalgorithmicx包定义前者,因此全部更改\STATE\State。同样,\ENDFOR应该是(阅读/ 的\EndFor文档)。algorithmicxalgpseudocode

    这些错误会产生Undefined control sequence误差。

  • 您必须\Procedure用 来结束 。这样\EndProcedure会产生错误。algorithmicxSome blocks are not closed!!!

其他的建议:

  • 当书写单词(而不是变量,例如x)时,使用\text{the word(s)}\mathrm{the word(s)},以罗马字体排版它们。

  • 您使用\times一个地方,而*其他地方则\times一致使用。

  • 关于你的前言:你加载了caption两次,使用了不同的参数,为什么?将所有参数添加到对的一次调用中caption。你还加载了algorithmalgpseudocode两次,这是毫无意义的。

    最后,惯例是在序言中使用\usepackage和 而不是\RequirePackage,尽管它们的作用相同。例如,参见https://tex.stackexchange.com/a/19933/586


在下面的代码中我删除了未使用的包。

在此处输入图片描述

\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\begin{document}
\begin{algorithm}
\caption{Generate transition matrix for one-dimensional quantum walk}\label{tran_mat_1d_qw}
\begin{algorithmic}[1]
\Procedure{generateTransitionMatrix}{$\mathrm{steps}$}
    \State $\mathrm{numElements} \gets \mathrm{steps} \times 4 + 2$
    \State $\mathrm{transitionMat} \gets \mathrm{numElements} \times \mathrm{numElements}$ MATRIX
    \State $\mathrm{col} \gets 0$
    \For {$i = 1 \to (\mathrm{steps} \times 2) - 1$}
        \State $\mathrm{row} \gets i \times 2$
        \State\hspace{\algorithmicindent} $\mathrm{transitionMat[row,      col]       } \gets 1$
        \State\hspace{\algorithmicindent} $\mathrm{transitionMat[row,      col + 1]}    \gets 1$
        \State\hspace{\algorithmicindent} $\mathrm{transitionMat[row + 5,  col]       } \gets 1$
        \State\hspace{\algorithmicindent} $\mathrm{transitionMat[row + 5,   col + 1]}   \gets -1$
    \EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}

相关内容