![如何将材料保存在一张双页上?](https://linux22.com/image/231362/%E5%A6%82%E4%BD%95%E5%B0%86%E6%9D%90%E6%96%99%E4%BF%9D%E5%AD%98%E5%9C%A8%E4%B8%80%E5%BC%A0%E5%8F%8C%E9%A1%B5%E4%B8%8A%EF%BC%9F.png)
我有 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}