自动增加 P​​DF 页面高度

自动增加 P​​DF 页面高度

我想使用 LaTeX/XeTeX 模拟 HTML 的无限页面高度,即使 PDF 页面变得越来越高,直到\newpage发布手册。

这可以通过设置非常大的页面高度并pdfcrop在输出上使用(或者只是手动设置页面高度)来模拟,但我想要一个纯 TeX 变体,并且如果可能的话,支持裁剪页面底部的脚注等。

答案1

您可以使用该包来实现这一点。它基本上就是您正在寻找的preview“纯 (La)TeX 变体”。您需要将文本高度设置为例如使用并将每页包装在...中。为此,只需有一个after 、一个before并将变体定义为。您将丢失一些可以使用宏重新添加的边框。但是,据我所知,这不支持页眉和页脚。pdfcrop\maxdimengeometry\begin{preview}\end{preview}\begin{preview}\begin{document}\end{preview}\end{document}\newpage\end{preview}\begin{preview}\PreviewBorder


这里是一些示例代码。显然preview已经注意抑制自动分页符,并且不需要修改文本高度。

\documentclass{article}

\usepackage[active,tightpage]{preview}

\renewcommand{\PreviewBorder}{1in}

\newcommand{\Newpage}{\end{preview}\begin{preview}}

\usepackage{lipsum}
\begin{document}
\begin{preview}
\lipsum
\Newpage
\lipsum[1]
\Newpage
\lipsum[1-30]
\Newpage
\lipsum[4-22]
\end{preview}
\end{document}

答案2

另一个 ConTeXt 解决方案。它处理脚注,但您需要标记页面的开始和结束。

\definestartstop[infinite]
                [before={\startTEXpage
                         \setupfootnotedefinition[location=joinedup]%
                        \startlocalfootnotes},
                 after={\placelocalfootnotes
                         \stoplocalfootnotes
                         \stopTEXpage}]

\setupTEXpage[width=\textwidth, offset=2mm]

然后可以用作

\starttext
\startinfinite
\section {Some section}
\input knuth \footnote{A random footnote}
\input ward
\stopinfinite
\stoptext

答案3

感谢您的回复,我正在使用 Martin 的解决方案,来自我的课程文件:

\iftrue
  \usepackage[active,tightpage,psfixbb]{preview}
  \renewcommand{\PreviewBorder}{1cm}

  \newenvironment{stretchpage}%
    {\begin{preview}\begin{minipage}{\hsize}}%
    {\end{minipage}\end{preview}}
  \AtBeginDocument{\begin{stretchpage}}
  \AtEndDocument{\end{stretchpage}}

  \newcommand{\@@newpage}{\end{stretchpage}\begin{stretchpage}}

  \let\@real@section\section
  \renewcommand{\section}{\@@newpage\@real@section}
\fi

这对我有用,如果我想打印文档,我只需禁用该阻止即可。

答案4

马丁回答在有限的尺寸范围内可以很好地工作,但是 TeX 有一个上限在每个长度上,包括页面高度。这个限制相当小,仅相当于大约 20 张首尾相连的信纸。为了解决这个限制,我将文档中的所有内容缩小了 40 倍,然后pdfposter在编译文档后将其重新放大。

\newcommand{\pagescale}{0.025}  % 1/40

% Use these instead of the usual units.
\newlength{\PT}\setlength{\PT}{\pagescale pt}
\newlength{\IN}\setlength{\IN}{\pagescale in}
\newlength{\CM}\setlength{\CM}{\pagescale cm}
\newlength{\MM}\setlength{\MM}{\pagescale mm}

% LaTeX defaults are almost all defined using \p@, which is supposed to be 1pt.
\makeatletter
\setlength{\p@}{1\PT}
\makeatother

% Reset separations that were coded with pt not \p@.
\setlength{\jot}{3\PT} % Math display line separation.
\scriptspace=0.5\PT
\hfuzz=0.1\PT
\vfuzz=0.1\PT
\overfullrule=5\PT
\maxdepth=4\PT
\delimitershortfall=5\PT
\nulldelimiterspace=1.2\PT
\scriptspace=0.5\PT
\parindent=20\PT
\parskip=0\PT plus 1\PT
\abovedisplayskip=12\PT plus 3\PT minus 9\PT
\abovedisplayshortskip=0\PT plus 3\PT
\belowdisplayskip=12\PT plus 3\PT minus 9\PT
\belowdisplayshortskip=7\PT plus 3\PT minus 4\PT
\topskip=10\PT
\splittopskip=10\PT
\parfillskip=0\PT plus 1fil
\normalbaselineskip=12\PT
\normallineskip=1\PT
\normallineskiplimit=0\PT
\smallskipamount=3\PT plus 1\PT minus 1\PT
\medskipamount  =6\PT plus 2\PT minus 2\PT
\bigskipamount =12\PT plus 4\PT minus 4\PT
\def\fontsubfuzz{.4\PT}
\unitlength = 1\PT
\fboxsep = 3\PT
\fboxrule = .4\PT
\let\Oldhrule\hrule
\def\hrule{\Oldhrule height 0.4\PT}
\let\Oldvrule\vrule
\def\vrule{\Oldvrule width 0.4\PT}

\documentclass{article}

\renewcommand{\baselinestretch}{\pagescale}

\newcommand{\marginsize}{2\CM}
\usepackage[paperwidth=8.5\IN,paperheight=16383pt,margin=\marginsize]{geometry}

\usepackage[active,tightpage]{preview}
\renewcommand{\PreviewBorder}{\marginsize}

% No point in page numbers if there is only one page.
\pagenumbering{gobble}

% Need to rerun math font definitions to get the sizes right. Loading amsfonts
% is sufficient.
\usepackage{amsfonts}

\usepackage{amsmath,lipsum}
\begin{document}

\begin{preview}
\begin{minipage}[b]{\textwidth}
\LaTeX

$\int_0^1 x^2 dx = \frac13$. \footnote{A footnote}

\hrule height \PT width 100\PT

\begin{align*}
    \int_{-\infty}^\infty e^{-x^2} dx &= \sqrt{\pi} \\
    z &= w
\end{align*}

\vrule height 100\PT

\lipsum

{\huge \lipsum

}

{\tiny \lipsum

}

% Very long example text, which couldn't fit on a single page at normal scale.
\newcount\foo
\foo=1000
\loop
    \lipsum[1]\par
    \advance \foo -1
\ifnum \foo>0
\repeat

\end{minipage}
\end{preview}
\end{document}

如果你有浮点数,那么你可能想要关注安迪的建议并设置\setcounter{totalnumber}{100},以便 LaTeX 可以在一页上放置更多内容。

以下脚本使用pdf海报在构建 pdf 之后将其缩放回其正常尺寸。

#!/bin/bash

if [ $# -ne 3 ]
then
    echo "Usage: $0 <scale factor> <input> <output>"
    exit 1
fi

scale=$1
newpagesize=$(pdfinfo "$2" | awk '/Page size:/ { print ('"$scale"' * $3) "x" ('"$scale"' * $5) "pt" }')

pdfposter "$2" -s "$scale" -m "$newpagesize" $3

相关内容