我正在使用该包和一些每个字母都会改变的变量创建大量信件scrlttr2
。这些变量的内容可能会导致信件占用我想要避免的额外页面。例如,有些人的地址占用的行数多于其他人,但也有其他变量也会导致这种情况发生。当我有空间时,我想设置,\KOMAoptions{parskip=full}
因为它看起来更好,但如果空间不足,我想设置\KOMAoptions{parindent}
。有没有一种好的方法可以自动执行此操作?以下是我想到的一些选项:
定义一个包含信件正文的命令。使用
\KOMAoptions{parskip=full}
和\savebox
地址以及正文命令来获取其高度。如果高度超过一定量,则设置\KOMAoptions{parindent}
。然后再次使用正文命令输出实际的信件。我不确定如何获取高度并打开它,并且在单个命令中定义整个信件及其包含的环境听起来很笨拙。制作两个版本的文档。在我的 Makefile 中,以某种方式识别版本的页数(如何?) ,并在必要时
parskip
替换版本。parindent
只需设置另一个变量来定义它,并为每个字母手动设置它(这就是我现在正在做的事情)。
欢迎其他想法。
答案1
这可以通过使用我使用的相同策略来实现这里. 它同样依赖于没有发生任何失误\AtEndDocument
。
\documentclass{scrlttr2}
\usepackage[english]{babel}
\usepackage{lipsum}
\makeatletter
\AtEndDocument{%
\ifnum\value{page} = 1%
\immediate\write\@auxout{\global\let\noexpand\@singlepage\noexpand\@empty}%
\fi%
}
\newcommand{\oneormorepages}{\ifdefined\@singlepage\KOMAoptions{parskip=full}\fi}
\makeatother
\begin{document}
\oneormorepages
\lipsum[1-5]
\end{document}