情况可能已知
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
这张(电子)纸张。