修复 algorithmicx 环境中出现的位置

修复 algorithmicx 环境中出现的位置

我试图强制算法停留在两段之间,但编译后,它出现在下一页。我的算法占用了半页以上,如下所示:

 \begin{algorithm}[tbh]
 \caption{Game}

 \begin{algorithmic}
 \State  \bf{Initialize:} \normalfont 
    \begin{itemize}
        \item \bf{A preferences:} \normalfont 
            \begin{itemize}
                \item 1 for A
                \item 2 for A
                \item 3 for A
            \end{itemize}
        \item \bf{B preferences::} \normalfont
            \begin{itemize}
                \item 1 for B
                \item 2 for B
                \item 3 for B
            \end{itemize}
        \item \bf{Nature sets the laws:} \normalfont
            \begin{itemize}
                \item The nature chooses a set of incentives $\mathcal{R}$.
            \end{itemize}
    \end{itemize}
 \State  
 \While {Set of Incentives $\mathcal{R}$ Exists}
 \State  
 \State \bf{Defend:} \normalfont 
    \begin{itemize}
        \item I
        \item II
        \item III
    \end{itemize}

 \State  
 \State \bf{Attack:} \normalfont 
    \begin{itemize}
        \item I
        \item II
        \item III
    \end{itemize}
 \State  
 \State \bf{Nature:} \normalfont 
    \begin{itemize}
        \item The Nature updates $\mathcal{R}$.
    \end{itemize}
  \State  
\EndWhile 
 \end{algorithmic}
\end{algorithm}

好像[tbh]在这里不起作用。

答案1

力量浮动保持在特定位置,添加float包裹你的序言

\usepackage{float}% http://ctan.org/pkg/float

并使用[H]浮动位置说明符。完成。

在此处输入图片描述

\documentclass{article}
\usepackage[margin=1in]{geometry}% For this example
\usepackage{algorithm,algpseudocode,float}
\usepackage{lipsum}% For this example

\begin{document}

\lipsum[1]

\begin{algorithm}[H]% Use "stay right HERE" already!
  \caption{Game}
  \begin{algorithmic}
    \State \textbf{Initialize:}
    \begin{itemize}
      \item \textbf{A preferences:}
        \begin{itemize}
          \item 1 for A
          \item 2 for A
          \item 3 for A
        \end{itemize}
      \item \textbf{B preferences::}
        \begin{itemize}
          \item 1 for B
          \item 2 for B
          \item 3 for B
        \end{itemize}
      \item \textbf{Nature sets the laws:}
        \begin{itemize}
          \item The nature chooses a set of incentives~$\mathcal{R}$.
        \end{itemize}
    \end{itemize}
    \State  
    \While {Set of Incentives~$\mathcal{R}$ Exists}
      \State  
      \State \textbf{Defend:}
        \begin{itemize}
          \item I
          \item II
          \item III
        \end{itemize}
      \State  
      \State \textbf{Attack:}
        \begin{itemize}
          \item I
          \item II
          \item III
        \end{itemize}
      \State  
      \State \textbf{Nature:}
      \begin{itemize}
        \item The Nature updates~$\mathcal{R}$.
      \end{itemize}
      \State  
    \EndWhile 
  \end{algorithmic}
\end{algorithm}

\lipsum[2]

\end{document}

浮动元素之所以没有停留在它应该停留的位置,可能是因为它太大了,一开始就不适合页面。参见如何影响 LaTeX 中图形和表格等浮动环境的位置?。最有可能的变量如\topfraction\textfraction导致浮动元素自行移动到页面上。

使用浮点说明符可能会有一些缺点[H],尽管这些缺点很小。请参阅H说明符的缺点

答案2

中有两种环境algorithmicx

  1. 一种是algorithmic,其算法排版与普通文本非常相似。如果您将其放在两段之间,它将位于两段之间,但它会跨页。

  2. 另一个是algorithm,它是一个浮动对象。这意味着它可以获得标题,它将停留在一页上,LaTeX 会尝试将其放置在您想要的位置,但基本上,它最终会停留在 LaTeX 最喜欢的位置。

您使用的是后者。您[tbh]指示 LaTeX 尝试以其他方式放置算法:

  1. 这里,在你的两个段落之间。

  2. 位于页面顶部(可以是本页或下一页)。

  3. 在页面底部(相同)。

如果您的算法没有放在段落之间,那是因为 LaTeX 认为它不适合那里。您必须决定是否要跨页面拆分它(仅使用algorithmic)或将其放在 LaTeX 建议的位置。或者您可以强制执行它,使用floatWerner 的答案中的包,但这很可能看起来很丑陋。

相关内容