我有几个逐字文本块,每个块都应放在单独的页面上(不能放其他内容)。页面大小应确定为紧贴最大的块,而所有其他块应像往常一样从左上角开始,一直到最远。块的垂直和水平尺寸以及数量可能有所不同,我不知道哪一个是最大的。
有没有办法从 Latex 内部自动设置所需的页面大小?
由于我假设这是不可能的 - 有没有关于如何从外部做到这一点的建议?我正在用 Java 生成块,所以我也可以为正确的页面尺寸创建 Latex 标头。但是,什么是做到这一点的好方法(哪个文档类/包最适合(可能是几何图形……))?尺寸本身应该很容易计算,因为 Latex 中的字体具有固定的字符大小。
(我知道这个要求有点奇怪,但这正是我所需要的。如果有的话,我显然更喜欢仅使用 Latex 的解决方案......)
答案1
使用maxpage
环境进行剪切和粘贴文本。使用\maxpageinput
来处理大段文字在其他文件中。wrapper
对每个页面使用以确保standalone
满意。
\documentclass[multi=wrapper]{standalone}
\usepackage{listings}
\lstset{aboveskip=0pt,belowskip=0pt}
\newlength{\maxheight}
\newlength{\maxwidth}
\newcommand{\setpagesize}[2]{\global\maxwidth=#1\relax \global\maxheight=#2\relax}% executed with aux file read
\makeatletter
\AtEndDocument{\immediate\write\@auxout{\string\setpagesize{\the\maxwidth}{\the\maxheight}}}
\makeatother
\newenvironment{wrapper}{}{}
\newcommand{\maxpageinput}[1]% #1 = fliename
{\setbox0=\hbox{\lstinputlisting{#1}}%
\dimen0=\ht0
\advance\dimen0 by \dp0
\ifdim\dimen0>\maxheight \global\maxheight=\dimen0\fi
\ifdim\wd0>\maxwidth \global\maxwidth=\wd0\fi
\parbox[c][\maxheight][t]{\maxwidth}{\usebox0}%
}
\lstnewenvironment{maxpage}{\setbox0=\hbox\bgroup}%
{\egroup
\dimen0=\ht0
\advance\dimen0 by \dp0
\ifdim\dimen0>\maxheight \global\maxheight=\dimen0\fi
\ifdim\wd0>\maxwidth \global\maxwidth=\wd0\fi
\parbox[c][\maxheight][t]{\maxwidth}{\usebox0}%
}
\begin{document}
\begin{wrapper}
\begin{maxpage}
This is a test.
\textbullet $\sin x^2$
And it has more than one line.
In fact, it goes on and on and on and on and on and on and on until it extends quite far.
\end{maxpage}
\end{wrapper}
\begin{wrapper}
\maxpageinput{test5.tex}
\end{wrapper}
\end{document}
答案2
这是仅限 TeX 的解决方案。用于pdftex document
创建 PDF(无 LaTeX)。
\pdfhorigin=0pt \pdfvorigin=0pt
\newdimen\tmpdim
\newdimen\cwidth \newdimen\cheight
\newread\testin \newwrite\outfile
\def\softinput #1 {\let\next=\relax \openin\testin=#1
\ifeof\testin \message{Warning: the file #1 does not exist, TeX me again}
\else \closein\testin \def\next{\input #1 }\fi
\next}
\def\bye{\immediate\openout\outfile=\jobname.dat
\immediate\write\outfile{%
\string\pdfpagewidth=\the\cwidth \space
\string\pdfpageheight=\the\cheight}
\end
}
\pdfpagewidth=0pt \pdfpageheight=0pt
\softinput \jobname.dat
\def\chunk{\afterassignment\chunkA\setbox0=\hbox}
\def\chunkA{\aftergroup\chunkB}
\def\chunkB{
\tmpdim=\ht0 \advance\tmpdim by\dp0
\ifdim\pdfpagewidth<\wd0 \pdfpagewidth=\wd0 \fi
\ifdim\pdfpageheight<\tmpdim \pdfpageheight=\tmpdim \fi
\ifdim\cwidth<\wd0 \cwidth=\wd0 \fi
\ifdim\cheight<\tmpdim \cheight=\tmpdim \fi
\shipout\box0
\advance\pageno by1
}
\chunk{first}
\chunk{Second joj}
\chunk{third}
\bye
使用外部文件\jobname.dat
。当第一次运行 TeX 时,此文件不存在,因此 PDF 页面尺寸会逐页增大。.dat
当\bye
宏展开时,这些尺寸的最大值会保存到文件中。如果第二次(或更多次)运行 TeX,则会.dat
读取文件并使用第一页的最大尺寸。