如何更改由 plain-TeX 生成的 pdf 文件的页面大小?

如何更改由 plain-TeX 生成的 pdf 文件的页面大小?

情况可能已知

LaTeX我知道可以使用包更改 pdf-page-size geometry。但是如何在 中执行此操作plain-TeX

例如,更改页面相关参数(如\vsize\hoffset)确实会引入变化,但似乎并没有触及写入 pdf 的纸张格式,这里是 8,27 x 11.69 英寸。

% setting (some) page parameters
\vsize 3in
\pagegoal \vsize
\hsize 4in
\hoffset 2in
\topskip 1.5in


\headline{My head \hrulefill}\footline{\hrulefill Your foot - \the\pageno}

Lorem ipsum dolor sit amet consectetuer nibh enim congue porta vel. Commodo hendrerit pellentesque Curabitur quis consectetuer Integer laoreet ante adipiscing aliquet. Congue condimentum tempus lorem nec leo et semper Aliquam senectus augue. Dolor massa vitae Nullam Sed est dignissim penatibus tellus orci Aliquam. Nulla sed iaculis aliquet massa ipsum Nullam id ipsum vitae sapien. Consequat Vestibulum Ut id morbi Aliquam lobortis Fusce Lorem at platea. Nibh.

Justo elit montes nulla justo at quis nascetur diam Morbi Phasellus. Vestibulum enim Vestibulum semper Curabitur consequat ante penatibus quis ut auctor. Vestibulum nunc Aliquam interdum non wisi congue nec interdum Sed orci. Sed Nam consequat enim non sem dignissim vitae eleifend mauris mauris. Curabitur enim ligula massa orci aliquam ac Phasellus semper id tortor. Magna.

Vitae laoreet lorem Nulla Nunc Nunc nunc convallis nibh venenatis Vivamus. Curabitur laoreet felis congue interdum condimentum augue at condimentum id Aliquam. Suspendisse adipiscing velit ipsum ipsum Ut Aenean pellentesque consequat enim et. 

\bye

页面大小

结果

问题

如何解决这个问题?好几天都找不到答案,无论是在书上还是在网上。我正在使用 MikTeX 的当前 TexWorks,使用 pdftex 进行编译。

答案1

TeX(正如 Knuth 所设计的那样)根本没有页面大小的概念。打印或查看一直是 DVI 驱动程序的工作。

唯一的例外是,根据 Knuth 的规定,所有司机必须考虑距离纸张左边缘一英寸和距离纸张上边缘一英寸的原点,无论最终使用哪种纸张(可能只是屏幕上的虚拟纸张)。

由于pdftex它有自己的驱动程序,因此需要向它传递所需的纸张尺寸,并且它为该作业提供了一些原语:

  • \pdfpagewidth\pdfpageheight是主要的;
  • \pdfhorigin\pdfvorigin接下来。

假设您希望页面宽度为 10 英寸,页面高度为 9 英寸,并且文本块的左上角距离左边缘和上边缘均为 3 英寸。

\pdfpagewidth=10truein
\pdfpageheight=9truein
\pdfhorigin=3truein
\pdfvorigin=3truein

\hsize=4truein
\vsize=3truein

\input plipsum

\lipsum{3-7}

\bye

在此处输入图片描述

抱歉,长度以厘米为单位,但您知道,几乎每个人都会使用它们。

答案2

我建议将\pdfhorigin\pdfvorigin设置为0pt,以便将参考点设置为纸张的左上角。然后您可以将\hoffset和设置\voffset为从纸张边框测量的边距,您无需在宏中包含 +-1 英寸的计算,这样生活就更简单了。和\pdfpagewidth应该\pdfpageheight设置为实际的纸张宽度和高度。

例如,如果您希望 A4 纸张尺寸的所有边距均为 2cm,那么您可以设置:

\pdfhorigin=0pt  \pdfvorigin=0pt % We don't support a sub-optimal Knuth's decision about (1in, 1in)

\pdfpagewidth=210mm  \pdfpageheight=297mm  % A4 paper dimensions

\hoffset=2cm
\voffset=2cm
\hsize=\dimexpr \pdfpagewidth - 2\hoffset \relax
\vsize= \dimexpr \pdfpageheight - 2\voffset \relax

请注意,OpTeX 将\pdfhorigin和设置\pdfvorigin为 0pt,因为 (1in,1in) 参考点位置很烦人。

答案3

解决方案

解决方案已经(几乎)存在:使用pdftex。根据其用户手册需要做的就是添加必需的pdf-primitives

% setting pdf-page parameters  <<<<<< new
\pdfoutput 1
\pdfpageheight 5in
\pdfpagewidth 8in

% setting (some) page parameters
\vsize 3in
\pagegoal \vsize
\hsize 4in
\hoffset 2in
\topskip 1.5in


\headline{My head \hrulefill}\footline{\hrulefill Your foot - \the\pageno}

Lorem ipsum dolor sit amet consectetuer nibh enim congue porta vel. Commodo hendrerit pellentesque Curabitur quis consectetuer Integer laoreet ante adipiscing aliquet. Congue condimentum tempus lorem nec leo et semper Aliquam senectus augue. Dolor massa vitae Nullam Sed est dignissim penatibus tellus orci Aliquam. Nulla sed iaculis aliquet massa ipsum Nullam id ipsum vitae sapien. Consequat Vestibulum Ut id morbi Aliquam lobortis Fusce Lorem at platea. Nibh.

Justo elit montes nulla justo at quis nascetur diam Morbi Phasellus. Vestibulum enim Vestibulum semper Curabitur consequat ante penatibus quis ut auctor. Vestibulum nunc Aliquam interdum non wisi congue nec interdum Sed orci. Sed Nam consequat enim non sem dignissim vitae eleifend mauris mauris. Curabitur enim ligula massa orci aliquam ac Phasellus semper id tortor. Magna.

Vitae laoreet lorem Nulla Nunc Nunc nunc convallis nibh venenatis Vivamus. Curabitur laoreet felis congue interdum condimentum augue at condimentum id Aliquam. Suspendisse adipiscing velit ipsum ipsum Ut Aenean pellentesque consequat enim et. 

\bye

现在页面尺寸为 8 x 5 英寸,如图所示。

尺寸

结果

背景

这个问题确实众所周知,并不新鲜。例如,请参阅有关2013 年多个 TeX 编译器的页边距,尤其是评论。

这种困惑之所以存在,可能是因为如今我们习惯于将“打印面积”与“纸张大小”联系起来。对于使用办公室或家用打印机的文本处理器来说,这是一个有效的假设,这些打印机大多数时候使用信纸或 A4 纸。

然而,TeX设计时就考虑到了排版,或者更像古腾堡,以及早在他之前的中国等人创造了印刷纸的方式。

这意味着你有一个打印块(例如排版 q 或 n,它们将移动到“图 1 印刷机”中标有 h 的块下),它大致包含上面显示的页眉和页脚之间的区域(以及更多)。可以说,集合排版上的坐标由 TeX 参数(如\vsize\hoffset)及其放置算法指示。

相反,在实际打印之前,纸张尺寸可能为人所知,也可能不为人所知,而且纸张尺寸肯定会更大,之后会被裁成更小的碎片。想想如何pdf-primitives保管pdftex这张(电子)纸张。

相关内容