自动化固定宽度页面,长度>某个最小长度,但仅达到所需的长度

自动化固定宽度页面,长度>某个最小长度,但仅达到所需的长度

我正在尝试自动化 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 }
}

(抱歉,未经严格测试。)

相关内容