我正在尝试自动化 egreg 提出的解决方案如何定义固定宽度的页面,但长度>某个最小长度,但仅限于需要的长度通过挂接\begin{document}
和\end{document}
。
因此,egreg 的解决方案很好用:
\documentclass{article}
\def\MinimumPaperHeight{12cm}
\usepackage{geometry}
\geometry{paperwidth=\MinimumPaperHeight,paperheight=\maxdimen,margin=1cm}
\usepackage{lipsum}
\begin{document}
\setbox0=\vbox{
\lipsum[1-6]
}
\dimen0=\dp0
\pdfpageheight=\dimexpr\ht0+2cm\relax
\ifdim\pdfpageheight<\MinimumPaperHeight \pdfpageheight=\MinimumPaperHeight \fi
\unvbox0\kern-\dimen0
\end{document}
但似乎无法让它发挥作用:
\documentclass{article}
\def\MinimumPaperHeight{12cm}
\usepackage{geometry}
\geometry{paperwidth=\MinimumPaperHeight,paperheight=\maxdimen,margin=1cm}
\usepackage{lipsum}
\usepackage{environ}
\NewEnviron{MyBox}{
\setbox0=\vbox{\BODY}%
}{%
\dimen0=\dp0%
\pdfpageheight=\dimexpr\ht0+2cm\relax%
\ifdim\pdfpageheight<\MinimumPaperHeight \pdfpageheight=\MinimumPaperHeight \fi%
\unvbox0\kern-\dimen0%
}
\AtBeginDocument{\begin{MyBox}}
\AtEndDocument{\end{MyBox}}
\begin{document}
\lipsum[1-6]
\end{document}
挂钩\AtBeginDocument
是按照这个解决方案如何在 \begin{document} 之后立即自动添加文本。
答案1
这行不通,因为\begin{MyBox}
需要看 \end{MyBox}
,但事实并非如此,因为文档在标记实际出现之前就结束了:用 定义的环境的内容\NewEnviron
直到用 的扩展进行处理后才会扩展\BODY
。
一个解决方案是直接挂接到\document
和\enddocument
:
\usepackage{etoolbox}
\AtBeginDocument{
\setbox0=\vbox\bgroup
\preto\enddocument{\egroup
\dimen0=\dp0
\pdfpageheight=\dimexpr\ht0+2cm\relax
\ifdim\pdfpageheight<\MinimumPaperHeight
\pdfpageheight=\MinimumPaperHeight
\fi
\unvbox0\kern-\dimen0 }
}
(抱歉,未经严格测试。)