## 编译环境 操作系统 * 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 回答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

截屏2020-12-15 下午6.53.44.png

  • 好的,多谢您的回答。我还特意看了原论文的 `latex` 文件,发现其写的和我一致,但是最终的效果不一样,应该他使用了别的什么包,或者可能是版本差异。 – 文盲 2020-12-16 17:19 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。