为什么我的算法在 PDF 中找不到?

为什么我的算法在 PDF 中找不到?

我需要排版一个伪代码算法。(我使用纺织工作室Windows 7的。)如果我将代码放在一个新的tex文件中,我可以看到pdf文件。但是,如果我将它放在其他tex文件中,我就看不到它了。我有许多tex文件无法在这里显示。但是,其他部分可以很好地显示,只有算法部分消失了。

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{algpseudocode}
\usepackage{algorithm}

\begin{document}

\begin{algorithm*}  **// add star here** 
\caption{Euclid’s algorithm}\label{euclid}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{The g.c.d. of a and b}
  \State $r\gets a\bmod b$
  \While{$r\not=0$}\Comment{We have the answer if r is 0}
  \State $a\gets b$
  \State $b\gets r$
  \State $r\gets a\bmod b$
  \EndWhile\label{euclidendwhile}
  \State \textbf{return} $b$\Comment{The gcd is b}
 \EndProcedure
\end{algorithmic}
\end{algorithm*}

\end{document}

编译工作正常(没有出现任何错误),但在 PDF 文件中找不到该算法。重复一遍,我使用以下软件包:

 \usepackage{amsmath}
 \usepackage{algpseudocode}
 \usepackage{algorithm}

如果我这样放置算法部分:

mark1 
  "the algorithm part"

标记2

更新

输出 :

  ----------------------------------
  caption 
  -----------------------------------         
  the algorithm, but , it crosses two columns , is it possible to make it only occupy one column, my article is two column style. 

我可以在 pdf 中看到“mark1”和“mark2”,但看不到“算法部分”。

任何想法?

答案1

根据你问题的长串评论,似乎你问题中的代码仍然没有反映出你在机器上使用的内容。重要的是你向我们提供所有相关信息(但不要超过这个范围;请参阅最小工作示例)而不是一次性地分发。否则,那些想帮助你的人只是在黑暗中摸索着寻找问题所在可能并且可能很快就会失去耐心。

以下是我目前的想法。在你的问题中,你写道

[该算法]跨越两列,是否可以让它只占据一列?

但是,无论您的文件是否全球或仅本地多列不清楚,因为你的评论, 你写

我用\begin{multicols}{2}

但是,在你的问题中你也写道

我的文章是双栏式的

正如所述本文由软件包的作者编写multicol,该multicol环境仅适用于

[...] 可在同一页面上在单列格式和多列格式之间切换。

因此,如果您的文档完全是两列,则不需要任何multicol环境。您只需要将twocolumn选项(以及可能的其他选项)传递给article类:

\documentclass[11pt,twocolumn]{article}

我假设这就是你想要的。在这种情况下,算法会按照预期在一列中使用以下代码进行排版。唯一的问题是你可能希望保持行数短,以避免算法中出现太多换行符;例如,考虑删除算法注释,就像我在代码中所做的那样。

在此处输入图片描述

\documentclass[11pt,twocolumn]{article}

\usepackage{amsmath}
\usepackage{algpseudocode}
\usepackage{algorithm}
%\usepackage[showframe]{geometry}%<--- only to show the page structure

\begin{document}
\begin{algorithm}
\caption{Euclid’s algorithm}\label{euclid}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}
  \State $r\gets a\bmod b$
  \While{$r\not=0$}
  \State $a\gets b$
  \State $b\gets r$
  \State $r\gets a\bmod b$
  \EndWhile\label{euclidendwhile}
  \State \textbf{return} $b$
 \EndProcedure
\end{algorithmic}
\end{algorithm}

\end{document}

另一方面,如果你真的希望你的文档只有本地两列,那么简单地用环境包裹环境multicolsalgorithm我相信你就是这么做的)是行不通的,因为它algorithm是一个“浮动”,而multicol包不允许“列浮动”(例如,在egreg 的回答在 multicol 环境中获取浮动对象)。有关替代方案,请参阅我如何强制 TeX 完全使用第一列?

相关内容