有一天,我惊讶地发现,我用 LaTeX 制作的一些文档的纸张尺寸是美国信纸尺寸。我不住在美国。
我花了一些时间才发现这是由软件包引起的hyperref
。为什么这个软件包会改变纸张大小?我可以阻止它这样做,以便使用系统默认的纸张大小吗?
最小示例:
\documentclass[]{article}
% uncomment this to trigger switch to US letter size
%\usepackage{hyperref}
\begin{document}
x
\end{document}
我使用 进行编译pdflatex
。
我正在使用 MacTeX 2016。我的系统上的默认尺寸是 A4。tlmgr paper
输出:
Current context paper size (from /usr/local/texlive/2016/texmf-config/tex/context/user/cont-sys.tex): a4
Current dvipdfmx paper size (from /usr/local/texlive/2016/texmf-config/dvipdfmx/dvipdfmx.cfg): a4
Current dvips paper size (from /usr/local/texlive/2016/texmf-config/dvips/config/config.ps): a4
Current pdftex paper size (from /usr/local/texlive/2016/texmf-config/tex/generic/config/pdftexconfig.tex): a4
Current psutils paper size (from /usr/local/texlive/2016/texmf-config/psutils/paper.cfg): a4
Current xdvi paper size (from /usr/local/texlive/2016/texmf-config/xdvi/XDvi): a4
我知道我可以使用\documentclass[a4paper]{article}
来获得 A4,但我认为当未指定尺寸时系统将只使用默认值
答案1
只是因为输出格式具有默认纸张尺寸并不意味着 LaTeX 知道它。
在“过去”,TeX 与打印/显示 DVI 文件的程序之间没有关于纸张大小的通信。因此,您提到的默认设置的原因在于 — 如果您是美国人,您会为信纸设置页边距等,因此当您打印/显示页面时,显示信纸大小的页面是有意义的。
请记住,LaTeX 旨在根据不同的计算机提供相同的输入来生成相同的文档(尽管软件包会改变其行为)。因此,[a4paper]
如果您希望将文档打印或显示在 A4 大小的纸张上,则必须始终声明类选项。
回答您的具体问题,由于 pdfTeX 已经有 TeX 命令来明确设置页面大小并将其传达给输出驱动程序;由于 LaTeX 本身已基本冻结,因此它不使用这些命令,而原始行为是依靠您谈论的默认值来设置页面大小。
但是 hyperref 是一个现代软件包,引用了许多 PDF 内部内容,它所做的一件事就是确保 PDF 的纸张大小与 LaTeX 使用的纸张大小相匹配。
答案2
您可以使用布局包来测试布局。
\documentclass[a4paper]{article}
\usepackage{layout}
\begin{document}
\layout
\end{document}
这给出了信件(不含 A4paper)的值:
使用 a4paper 的话:
正如您所见,相当多的值有所不同,最重要的是 paperwidth 和 paperheight。
如果没有 hyperref,pdf 页面宽度将设置为系统默认宽度。就您而言,这意味着 pdf paperwidth 和 tex paperwidth 实际上是不同的。
hyperref(或 graphicx)将强制 pdf 纸张宽度与 tex 纸张宽度同步。