提问于:
浏览数:
10497
## 编译环境
操作系统
* Windows 10
Tex发行版
* TexLive `2020`
## 我的问题
我使用了 `algorithm` 系列包渲染一段伪代码,导包如下所示:
```
\usepackage{algorithm}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
\floatname{algorithm}{Algorithm}
\renewcommand{\algorithmicrequire}{\textbf{Require:}}
\renewcommand{\algorithmicensure}{\textbf{Require:}}
```
我想要实现这么一个效果:
![预实现效果](https://wenda.latexstudio.net/data/attach/201215/bEfKryAX.png "预实现效果")
但是我写的代码在编译过之后, `for` 语句内部第二行在换行后会顶在首部而不是缩进来,如下所示:
![我实现的效果](https://wenda.latexstudio.net/data/attach/201215/Y07f3sWo.png "我实现的效果")
我的代码如下:
```Latex
\begin{algorithm}[t]
\caption{Model-Agnostic Meta-Learning}
\begin{algorithmic}[1]
\Require $p(\mathcal{T})$ : distribution over tasks
\Ensure $\alpha, \beta$ : step size hyperparameters
\State randomly initialize $\theta$
\While {not done}
\State Sample batch of tasks $\mathcal{T}_{i} \sim p(\mathcal{T})$
\ForAll {$\mathcal{T}_{i}$}
\State Evaluate $\nabla_{\theta} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta}\right)$
with respect to $K$ examples
\State Compute adapted parameters with
gradient descent: $\theta_{i}^{\prime}=\theta-\alpha \nabla_{\theta} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta}\right)$
\EndFor
\State Updat $\theta \leftarrow \theta-\beta \nabla_{\theta} \sum_{\mathcal{T}_{i} \sim p(\mathcal{T})} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta_{i}^{\prime}}\right)$
\EndWhile
\end{algorithmic}
\end{algorithm}
```
1 回答
0
文档里有这么几句话,
> 1. 不要过分夸大您的伪代码。如果您觉得需要过多评论,则可能是在做错什么:您应该以常规文本而不是伪代码详细说明算法的内部工作;
> 2. 如果您觉得伪代码太大,则将其分解为子算法,也许可以抽象一些任务。您的读者可能会感谢您。
> 3.其中定界符是任何“格式正确的”字符串,包括空字符串。使用此命令,可以通过发出以下命令将冒号更改为句点(。)甚至通过指定空字符串或空格(\)来省略分隔符,这似乎最适合您的文档。作为此类命令的示例。
就是说你把它当常规的文本排列就行,我后来试了下,如果用`\phantom{}`的话可能对不齐,后来多用了几个 \
来进行填充空字符,当然我也试了下用 表格排,内部似乎不允许,所以似乎好像也只能用 \ 充当空字符了,虽然有点所见即所得的意思,但是我能想到的方法好像就这一种了,而且可能是人眼目视对齐而非类似tabular的机器对齐。
我觉得算法的包还是algorithm2e用的最舒服,提供的帮助和修改可以最多,algorithm给的帮助或者允许的修改就少很多了。
代码如下:
> ```
\begin{algorithm}[t]
\caption{Model-Agnostic Meta-Learning}
\begin{algorithmic}[1]
\Require $p(\mathcal{T})$ : distribution over tasks
\Ensure $\alpha, \beta$ : step size hyperparameters
\State randomly initialize $\theta$
\While {not done}
\State Sample batch of tasks $\mathcal{T}_{i} \sim p(\mathcal{T})$
\ForAll {$\mathcal{T}_{i}$}
\State
Evaluate $\nabla_{\theta} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta}\right)$
with respect to $K$ examples
\State Compute adapted parameters with
gradient de- \\ \ \ \ \ \ \ \ \ \ scent: $\theta_{i}^{\prime}=\theta-\alpha \nabla_{\theta} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta}\right)$
\EndFor
\State Updat $\theta \leftarrow \theta-\beta \nabla_{\theta} \sum_{\mathcal{T}_{i} \sim p(\mathcal{T})} \mathcal{L}_{\mathcal{T}_{i}}\left(f_{\theta_{i}^{\prime}}\right)$
\EndWhile
\end{algorithmic}
\end{algorithm}
```
![](https://wenda.latexstudio.net/data/attach/201215/TibWel1W.png)
所见即所得可能能让你眼前满足,要是给别人用或者看代码的话可能被打哈哈哈哈哈。
回答: 2020-12-15 19:52
-
好的,多谢您的回答。我还特意看了原论文的 `latex` 文件,发现其写的和我一致,但是最终的效果不一样,应该他使用了别的什么包,或者可能是版本差异。 – 文盲 2020-12-16 17:19 回复
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。