我想使用 LaTeX/XeTeX 模拟 HTML 的无限页面高度,即使 PDF 页面变得越来越高,直到\newpage
发布手册。
这可以通过设置非常大的页面高度并pdfcrop
在输出上使用(或者只是手动设置页面高度)来模拟,但我想要一个纯 TeX 变体,并且如果可能的话,支持裁剪页面底部的脚注等。
答案1
您可以使用该包来实现这一点。它基本上就是您正在寻找的preview
“纯 (La)TeX 变体”。您需要将文本高度设置为例如使用并将每页包装在...中。为此,只需有一个after 、一个before并将变体定义为。您将丢失一些可以使用宏重新添加的边框。但是,据我所知,这不支持页眉和页脚。pdfcrop
\maxdimen
geometry
\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