如何将材料保存在一张双页上?

如何将材料保存在一张双页上?

我有 LaTeX 的双面文档(所以我使用twoside选项)。我需要将一些材料(文本、图片……)保存在一张双页上。换句话说,我想允许从奇数页到偶数页的分页,但我想禁止从偶数页到奇数页的分页。

我尝试写宏:

\newcommand{\nl}{
\\ \ifodd\c@page
\relax
\else
\nopagebreak
\fi}

并用它来代替\\(我的文档中没有使用任何其他换行符命令),但它不起作用。谢谢大家的回答。

编辑:谢谢,但 Steves 环境对我来说不太适用。我尝试将我的材料放入其中,但它无法将其放在 2 页上,而是显示Overflow in twopage environment

我将尝试明确阐述我需要做的事情:

  • 最好是一个环境或者一个宏。
  • 如果当前页面是偶数,则必须防止 LaTeX 破坏页面(如果绝对不可能将材料保持在偶数页上,则可能会破坏页面,但我需要它努力尝试)。这可以通过将惩罚设置为 20000 或其他任何方式来实现 - 请提出尽可能多的卑鄙伎俩。
  • 如果当前页是奇数,则允许分页,但不是必须的。
  • 使用此环境或宏的代码将由 Java 程序生成,因此如果材料无法放入页面或双页中,则生成错误是没有意义的。Java 无法知道 LaTeX 错误。

感谢所有的想法

答案1

\documentclass[twoside]{report}
\usepackage{lipsum}

\makeatletter
\newenvironment{forcedoublepage}{%
  \begingroup
  \dimen255=\prevdepth
  \setbox0\vbox\bgroup
  \prevdepth=\dimen255
}{%
  \egroup
  \ifodd\c@page\@tempdima\z@\else\@tempdima\pagegoal\fi
  \expandafter\@tempdimb\dimexpr\@tempdima+\ht0+\dp0\relax
  \ifdim\@tempdimb<2\pagegoal\else\clearpage\fi
  \unvbox0
  \endgroup
}
\makeatother

\begin{document}
\lipsum

\begin{forcedoublepage}
  \lipsum
\end{forcedoublepage}
\end{document}

相关内容