\paperheight、\paperwidth 和 \pdfpageheight、\pdfpagewidth 之间有什么区别?

\paperheight、\paperwidth 和 \pdfpageheight、\pdfpagewidth 之间有什么区别?

我找不到该问题的任何现有答案。

那么,两者有什么区别呢?使用其中一个二重奏比使用另一个二重奏有什么优势吗?

答案1

\pdfpageheight是由 引入的pdftex(并且它在其大多数“新”命令前加上了 前缀\pdf)它设置了生成的 PDF 中媒体框的垂直大小。xetex 也支持这个原语并将信息传递给 xdvipdfmx dvi 驱动程序。luatex 有一个具有相同功能的命令,但它被称为\pageheight

LaTeX 有一个命令\paperheight,通常使用 documentclass 选项进行设置,例如,a4paper它主要用于调整文本块的大小,例如,\textheight减去\paperheight顶部和底部边距的一些空间。如果加载了“了解”驱动程序特定代码(graphicshyperrefgeometry)的包,则默认情况下将根据包代码\(pdf)pageheight的值进行设置。\paperheight

因此,\paperheight在前言中设置通常不会产生任何效果,因为该值已用于设置\textheight,更改它不会产生任何效果。 如上所述,例外情况是如果包使用\paperheight前言中的值来设置\(pdf)pageheight\begin{document}相反,设置\(pdf)pageheight会立即改变生成的 PDF 的尺寸,尽管如果包重新设置了值,\begin{document}那么您直接设置的值可能不会被使用。

答案2

\paperheight是的,一方面\paperwidth\pdfpageheight另一方面之间存在很大差异\pdfpagewidth。这些差异是特定于引擎的:

  • \paperheight使用 pdfLaTeX,所有四个宏都已定义。但是,和\pdfpageheight(和\paperwidth和)是否\pdfpagewidth一致取决于您的系统设置。例如,我的基于 MacOS 的计算机当前配置为将其视为A4“标准”纸张尺寸。但是如果我运行

    \documentclass[letterpaper]{article} % letterpaper: 8.5" wide, 11.0" tall
    \begin{document}
    \obeylines
    \the\paperheight
    \the\pdfpageheight 
    \the\paperwidth
    \the\pdfpagewidth
    \end{document}
    

    通过 pdfLaTeX,我得到794.96999pt614.295pt——相当于和的 11" 和 8.5" 。\paperheight但是\paperwidth,我得到845.04684pt597.50787pt——相当于和的 297mm 和 210mm,或 11.69" 和 8.27" 。(旁注:297mm 和 210mm 是 A4 纸的正确\pdfpageheight\pdfpagewidth。)换句话说,选择文档类选项letterpaper可以更改\paperheight和的值\paperwidth,但不能更改\pdfpageheight和的值\pdfpagewidth

  • 在 XeLaTeX 下,宏\pdfpagewidth\pdfpageheight都存在,但它们都默认设置为。和0pt的值取决于是否提供或作为文档类级别选项。\paperheight\paperwidtha4paperletterpaper

  • 在 LuaLaTeX 下,默认情况下\pdfpagewidth\pdfpageheight不明确的\pagewidth。和的值\pageheight将与和相同或不同\paperwidth,具体取决于您的系统设置是否与您在文档类级别指定的\paperheight纸张尺寸选项(a4paper或)一致。letterpaper

    \paperheight和的值\paperwidth均取决于a4paper或是否letterpaper作为文档类级别选项提供。

答案3

您想读取还是写入这些尺寸?

在 PdfLatex 和 XeLatex 中,更改\pdfpageheight\pdfpagewidth实际上会从当前页开始更改文档页面大小。在 LuaLatex 中,您必须使用\pageheight\pagewidth,即不使用pdf

\paperheight并且\paperwidth似乎是真实变量的副本或初步变量。哪个包/选项/宏读取或设置哪个,其他答案中有更好的解释。—如果您希望在计算边距等时考虑与实际输出区域不同的纸张尺寸,那么拥有两对可能很有意义。也许吧。

顺便说一句,只有 PDF 路径允许文档中间更改。DVI 和 Postscript 不支持此功能。

相关内容