我教授编程,我使用 Latex 的方法之一是将整个班级提交的程序生成一个大型 PDF 文档,然后发送到打印机。(大约有 100 名学生,单独创建和打印 100 份文档很烦人。)为了保护树木,我想在每张纸上打印四页(正面两页,背面两页)。我的打印机自然支持此设置。
问题是学生的程序不能写在同一张纸上。例如,如果第一个学生的程序有三页,第二个学生的程序也有三页,那么第一张纸上的 1-3 位置将写第一个学生的程序,第 4 位置将写第二个学生程序的第一页。然后第二张纸上的 1 和 2 位置将写第二个学生程序的后两页,第 3 和 4 位置将写第三个学生的程序,等等。
我想要的是一个 LaTeX 命令,根据当前绝对页数插入 0 到 3 页。如果当前绝对页数是 4 的倍数,则插入 0 页。如果不是,则最多插入 3 页,因此下一个命令将从 4 的倍数开始。
用 LaTeX 来类比,我想要一个 \cleartooddpage 版本,它可以清除到第四页。这实际上是我目前用来进行双面打印的方法,但如上所述,我希望每张纸打印四页。
答案1
欢迎使用 TeX-SE!本提案使用这个答案,似乎有效。(如果需要,您也可以删除\ifcase
。)
\documentclass[11pt]{article}
\usepackage{lipsum}
\usepackage{pgffor}
% from https://tex.stackexchange.com/a/398999/121799
\newcommand\InsertBlankPages[1]{% \InsertBlankPages{n} => insert n blank pages
\foreach \blank in {1,...,#1} {
\newpage
\thispagestyle{plain}
\mbox{}
}%
}
\newcommand\cleartoquadpage{\pgfmathtruncatemacro{\qcpg}{mod(\value{page},4)}%
\ifcase\qcpg%
\InsertBlankPages{3}\clearpage%
\or%
\InsertBlankPages{2}\clearpage%
\or%
\InsertBlankPages{1}\clearpage%
\or%
\clearpage%
\fi}
\begin{document}
\section{A}
\lipsum[1-10]
\cleartoquadpage
\section{B}
\lipsum[1-2]
\cleartoquadpage
\section{C}
\lipsum[1-12]
\cleartoquadpage
\section{D}
\lipsum[1-18]
\cleartoquadpage
\end{document}
您可以将其推广为任意数字。(4
此处为默认值。)
\documentclass[11pt]{article}
\usepackage{lipsum}
\usepackage{pgffor}
% from https://tex.stackexchange.com/a/398999/121799
\newcommand\InsertBlankPages[1]{% \InsertBlankPages{n} => insert n blank pages
\foreach \blank in {1,...,#1} {
\newpage
\thispagestyle{plain}
\mbox{}
}%
}
\newcommand\cleartopage[1][4]{\pgfmathtruncatemacro{\qcpg}{#1-1-mod(\value{page},#1)}%
\ifnum\qcpg=0%
\else%
\InsertBlankPages{\qcpg}%
\fi%
\clearpage}
\begin{document}
\section{A}
\lipsum[1-10]
\cleartopage[4]
\section{B}
\lipsum[1-2]
\cleartopage[4]
\section{C}
\lipsum[1-12]
\cleartopage[4]
\section{D}
\lipsum[1-18]
\cleartopage[4]
\end{document}