我正在仔细阅读 AlgPascal 包的文档http://tug.ctan.org/macros/latex/contrib/algorithmicx/algorithmicx.pdf
我的问题是当我使用
\For{k\gets 1}{K}
<command>
如何得到 :
\For{k\gets 1}{K}
<body>
\EndFor
这样,它就不打算向身体发出任何单一的命令了吗?
\For{k\gets 1}{K}
\Begin
% \begin{ALC@g}
\State $\mu_B \leftarrow \frac{1}{m}\sum_{i=1}^m x_i$
\State $\sigma_B^2 \leftarrow \frac{1}{m}\sum_{i=1}^m (x_i-\mu_B)^2$
\State $\hat{x_i} \leftarrow \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State $ y_i \leftarrow \gamma\hat{x_i} + \beta \equiv BN_{\gamma,\beta}(x_i)$
\State Using $\gamma$ and $\beta$ obtained from forward pass update:
\State \hskip1.5em $\hat{y_i} \leftarrow \frac{y_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State \hskip1.5em $y_i = BN_{\gamma,\beta}(y_i)$
\End
% \end{ALC@g}
这似乎工作正常,但打印开始和结束(我不想要)。 Hskip 可以解决问题,但每次都这样做很痛苦(在这里写一篇长论文)。
答案1
我建议您使用来自同一个包( )的algpseudocode
而不是,它与以下选项一起使用似乎可以更好地满足您的要求:algpascal
algorithmicx
noend
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[noend]{algpseudocode}
\begin{document}
\begin{algorithmic}
\For{$k\gets 1$ \textbf{to} $K$}
\State $\mu_B \leftarrow \frac{1}{m}\sum_{i=1}^m x_i$
\State $\sigma_B^2 \leftarrow \frac{1}{m}\sum_{i=1}^m (x_i-\mu_B)^2$
\State $\hat{x_i} \leftarrow \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State $ y_i \leftarrow \gamma\hat{x_i} + \beta \equiv BN_{\gamma,\beta}(x_i)$
\State Using $\gamma$ and $\beta$ obtained from forward pass update:
\State \hskip1.5em $\hat{y_i} \leftarrow \frac{y_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State \hskip1.5em $y_i = BN_{\gamma,\beta}(y_i)$
\EndFor
\end{algorithmic}
\end{document}
请注意,您必须用此命令重写 for 循环(参见上面的代码)。如果您更频繁地需要这种类型的循环,您可以决定使用经过调整的命令:
\algdef{SE}[FORto]{ForTo}{EndForTo}[2]{\algorithmicfor\ \(#1\) \textbf{to} \(#2\) \algorithmicdo}{}
\For
这是基于algpseudocode.sty
,但已根据algpascal.sty
允许第二个参数并使用数学模式来排版其参数。在这种情况下,该noend
选项已在宏定义期间考虑在内。修改后的 MWE 如下所示:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[noend]{algpseudocode}
\algdef{SE}[FORto]{ForTo}{EndForTo}[2]{\algorithmicfor\ \(#1\) \textbf{to} \(#2\) \algorithmicdo}{}
\begin{document}
\begin{algorithmic}
\ForTo{k\gets 1}{K}
\State $\mu_B \leftarrow \frac{1}{m}\sum_{i=1}^m x_i$
\State $\sigma_B^2 \leftarrow \frac{1}{m}\sum_{i=1}^m (x_i-\mu_B)^2$
\State $\hat{x_i} \leftarrow \frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State $ y_i \leftarrow \gamma\hat{x_i} + \beta \equiv BN_{\gamma,\beta}(x_i)$
\State Using $\gamma$ and $\beta$ obtained from forward pass update:
\State \hskip1.5em $\hat{y_i} \leftarrow \frac{y_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}}$
\State \hskip1.5em $y_i = BN_{\gamma,\beta}(y_i)$
\EndForTo
\end{algorithmic}
\end{document}