解决方案 1

解决方案 1

我希望文档中的伪代码能够通过 LaTeX 很好地放置(即没有现有的边界框、没有与其他文本重叠等),同时让文本环绕伪代码(因为文本的宽度很小)。

这个问题回答了如何将文本环绕在伪代码周围。但是,我的伪代码超出了页面底部,并覆盖在脚注上(如果我更改rR,它会覆盖在图形上)。我如何确保这种情况不会发生除了手动将伪代码放在我的 LaTeX 文档中的不同位置(即Section 1, Section 2, Section 2 code->Section 1, Section 2 code, Section 2解决这个问题并不好,因为我必须提交 LaTeX 文档)

我当前的代码:

\begin{wrapfigure}{r}{0.39\textwidth}
\begin{minipage}{0.39\textwidth}
\begin{algorithm}[H]
    \caption{example}\label{alg:example},
    \begin{algorithmic}[1]
        % algorithm
    \end{algorithmic}
\end{algorithm}
\end{minipage}
\end{wrapfigure}

答案1

这里有几个选项,但实际上并不是自动化的。让我们从一些可以复制您当前问题的方法开始:

在此处输入图片描述

\documentclass{article}

\usepackage{wrapfig,graphicx}
\usepackage{lipsum,showframe}

\begin{document}

\lipsum[1-4]

\begin{wrapfigure}{r}{0.4\linewidth}
  \includegraphics[width=0.9\linewidth]{example-image-10x16}
\end{wrapfigure}%
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam consectetur arcu at tellus consequat molestie. 
Sed feugiat turpis ac massa vestibulum feugiat. Orci varius natoque penatibus et magnis dis parturient 
montes, nascetur ridiculus mus. Aenean pharetra tortor est, ut hendrerit diam condimentum ut. Nunc consequat 
pulvinar posuere. Curabitur tincidunt vel est at rhoncus. Nunc sagittis lacus elit, nec malesuada magna 
lacinia eget. Proin porta, justo eu molestie sagittis, risus lacus sollicitudin quam, ut fermentum mauris 
augue at turpis. Donec auctor consequat metus quis fringilla. Nulla nec enim vel libero rhoncus pellentesque. 
Fusce nec lacus orci. Pellentesque eget lectus vitae tortor consequat imperdiet. Suspendisse aliquet blandit 
dolor, bibendum commodo ligula cursus et. Mauris aliquet massa in est facilisis, sed efficitur ipsum iaculis. 
Nulla vehicula diam mauris, a sagittis odio sodales et. Aliquam imperdiet feugiat lacus sed condimentum. Cras 
tellus turpis, dapibus eu tempor eget, lacinia et nulla. Nunc tempus malesuada massa ut rhoncus. Morbi 
vulputate sapien eros, at facilisis nulla tempus sed. Etiam tincidunt elit at molestie aliquet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam consectetur arcu at tellus consequat molestie. 
Sed feugiat turpis ac massa vestibulum feugiat. Orci varius natoque penatibus et magnis dis parturient 
montes, nascetur ridiculus mus. Aenean pharetra tortor est, ut hendrerit diam condimentum ut. Nunc consequat 
pulvinar posuere. Curabitur tincidunt vel est at rhoncus. Nunc sagittis lacus elit, nec malesuada magna 
lacinia eget. Proin porta, justo eu molestie sagittis, risus lacus sollicitudin quam, ut fermentum mauris 
augue at turpis. Donec auctor consequat metus quis fringilla. Nulla nec enim vel libero rhoncus pellentesque. 
Fusce nec lacus orci. Pellentesque eget lectus vitae tortor consequat imperdiet. Suspendisse aliquet blandit 
dolor, bibendum commodo ligula cursus et. Mauris aliquet massa in est facilisis, sed efficitur ipsum iaculis. 
Nulla vehicula diam mauris, a sagittis odio sodales et. Aliquam imperdiet feugiat lacus sed condimentum. Cras 
tellus turpis, dapibus eu tempor eget, lacinia et nulla. Nunc tempus malesuada massa ut rhoncus. Morbi 
vulputate sapien eros, at facilisis nulla tempus sed. Etiam tincidunt elit at molestie aliquet.

\end{document}

上面的例子中需要注意以下几点:

  • 我使用小写的right 选项来wrapfigure,将其放置在这里, 而不是R光,这使得它能够漂浮

  • wrapfig 文档明确提到以下内容:

    应将环境放置在不会超出分页符的位置。

这正是您所拥有的地方。

  • 我插入了一张高大图像 ( example-image-10x16),而不是算法/伪代码。两种情况下,流程/应用程序都是相同的,因此下面建议的解决方案在两种情况下都有效。

解决方案 1

使用Right(浮动)放置说明符作为wrapfigure环境。这允许块环绕浮动到后续页面中的下一个段落。

在此处输入图片描述

...
\begin{wrapfigure}{R}{0.4\linewidth}
  \includegraphics[width=0.9\linewidth]{example-image-10x16}
\end{wrapfigure}%
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam consectetur arcu at tellus consequat molestie. 
...

解决方案 2

设置文档没有位置奇怪的wrapfigure。这样您就可以看到文本在该特定页面上的结束位置。然后,\parnopar在那里插入一个 ,这样您就可以让段落结束(将内容推到与现在分开的段落底部齐平的位置)。插入一个段落分隔符(代码中的垂直间隙/空白行),然后插入一个wrapfigure以 开头的新段落\noindent

在第一个解决方案中,我们可以看到第一页的结束语是“...dolor, bibendum commodo”。因此,我们在\parnopar后面插入commodo

dolor, bibendum commodo \parnopar

\begin{wrapfigure}{r}{0.4\linewidth}
  \includegraphics[width=0.9\linewidth]{example-image-10x16}
\end{wrapfigure}%
\noindent ligula cursus et.

空行将强制分页,同时\noindent确保分页符看起来不像段落符,并将以下文本 - “ligula cursus et.” - 设置为与左边距齐平。

在此处输入图片描述

\documentclass{article}

\usepackage{wrapfig,graphicx}
\usepackage{lipsum,showframe}

\newcommand{\parnopar}{\parfillskip=0pt\par\parskip=0pt\noindent}

\begin{document}

\lipsum[1-4]

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam consectetur arcu at tellus consequat molestie. 
Sed feugiat turpis ac massa vestibulum feugiat. Orci varius natoque penatibus et magnis dis parturient 
montes, nascetur ridiculus mus. Aenean pharetra tortor est, ut hendrerit diam condimentum ut. Nunc consequat 
pulvinar posuere. Curabitur tincidunt vel est at rhoncus. Nunc sagittis lacus elit, nec malesuada magna 
lacinia eget. Proin porta, justo eu molestie sagittis, risus lacus sollicitudin quam, ut fermentum mauris 
augue at turpis. Donec auctor consequat metus quis fringilla. Nulla nec enim vel libero rhoncus pellentesque. 
Fusce nec lacus orci. Pellentesque eget lectus vitae tortor consequat imperdiet. Suspendisse aliquet blandit 
dolor, bibendum commodo \parnopar

\begin{wrapfigure}{r}{0.4\linewidth}
  \includegraphics[width=0.9\linewidth]{example-image-10x16}
\end{wrapfigure}%
\noindent ligula cursus et. Mauris aliquet massa in est facilisis, sed efficitur ipsum iaculis. 
Nulla vehicula diam mauris, a sagittis odio sodales et. Aliquam imperdiet feugiat lacus sed condimentum. Cras 
tellus turpis, dapibus eu tempor eget, lacinia et nulla. Nunc tempus malesuada massa ut rhoncus. Morbi 
vulputate sapien eros, at facilisis nulla tempus sed. Etiam tincidunt elit at molestie aliquet.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam consectetur arcu at tellus consequat molestie. 
Sed feugiat turpis ac massa vestibulum feugiat. Orci varius natoque penatibus et magnis dis parturient 
montes, nascetur ridiculus mus. Aenean pharetra tortor est, ut hendrerit diam condimentum ut. Nunc consequat 
pulvinar posuere. Curabitur tincidunt vel est at rhoncus. Nunc sagittis lacus elit, nec malesuada magna 
lacinia eget. Proin porta, justo eu molestie sagittis, risus lacus sollicitudin quam, ut fermentum mauris 
augue at turpis. Donec auctor consequat metus quis fringilla. Nulla nec enim vel libero rhoncus pellentesque. 
Fusce nec lacus orci. Pellentesque eget lectus vitae tortor consequat imperdiet. Suspendisse aliquet blandit 
dolor, bibendum commodo ligula cursus et. Mauris aliquet massa in est facilisis, sed efficitur ipsum iaculis. 
Nulla vehicula diam mauris, a sagittis odio sodales et. Aliquam imperdiet feugiat lacus sed condimentum. Cras 
tellus turpis, dapibus eu tempor eget, lacinia et nulla. Nunc tempus malesuada massa ut rhoncus. Morbi 
vulputate sapien eros, at facilisis nulla tempus sed. Etiam tincidunt elit at molestie aliquet.

\end{document}

解决方案 2考虑到这一点,你也可以削减你的algorithm成两半,将一部分内容显示在一页的底部,并将下半部分显示在下一页的顶部(参见算法超过 2 页)。但是,将这样的显示拆分到可能打印的输出页面上会显得很奇怪(因此不建议这样做)。

相关内容