请查看以下文件:
\documentclass[11pt,a4paper,landscape,twocolumn]{book}
%\usepackage{hyperref}
\begin{document}
\chapter{Test}
ABCD
\end{document}
当我不使用 hyperref 编译此文件时,横向选项被忽略。第二列被截断。
当我添加 hyperref 时,一切都正常工作。
有人知道这里出了什么问题吗?(我使用 MikTeX 2.9 64 位和 TeXnicCenter 2.02。)
答案1
该landscape
选项不会被忽略,它按照广告宣传的那样工作,交换\paperheight
和\paperwidth
,并设置\textwidth
和\textheight
用于横向方向。
在经典 TeX 中,没有控制打印介质的概念,因此文本块的大小是landscape
如果您希望将页面旋转 90 度,那么您只需用手移动打印的纸张即可。
然而时代在前进......大多数 dvi 驱动程序和 pdf 后端现在都有一种指定媒体大小和方向的方法,但如果使用特定于驱动程序的包,latex 只能将其传达给后端,graphics
例如hyperref
,geometry
所有驱动程序选项,如dvips
或pdftex
,也有启发式方法来猜测默认驱动程序。
答案2
问题是众所周知的:由于它们是在唯一可用的输出格式是 DVI 时设计的,因此在生成 PDF 输出时,标准类不会费心设置 PDF 页面尺寸\pdfpagewidth
和,因此无法使它们与内部 LaTeX2e 尺寸和\pdfpageheight
“同步” 。另一方面,现代 PDF 感知包纠正了这一行为。您可以加载包(也许使用选项)而不是,这样可以避免篡改文本尺寸和边距。或者,如果您想完全避免使用包,您也可以在源文件中包含一个手工制作的协议:\paperwidth
\paperheight
hyperref
geometry
pass
\documentclass[11pt,a4paper,landscape,twocolumn]{book}
% \usepackage[pass]{geometry}
% \usepackage{hyperref}
\makeatletter
\ifx \pdfoutput \@undefined \else
\ifnum \pdfoutput > 0
\AtBeginDocument{%
\pdfpagewidth \paperwidth
\pdfpageheight \paperheight
}
\fi
\fi
\makeatother
\begin{document}
\chapter{Test}
ABCD\newpage Efgh.
\end{document}
添加
我设法恢复了几年前为解决这个问题而编写的一个小包。它被命名为pdftexpatch
;代码如下:
%%------------- Identification -------------%%
\NeedsTeXFormat{LaTeX2e}[1998/12/01]
\ProvidesPackage{pdftexpatch}[2009/03/05 v.0.02]
%%-------------- Initial Code --------------%%
% No initial code.
%%--------- Declaration of Options ---------%%
% No options.
%%----------- Options Processing -----------%%
% No options.
%%---------------- Main Code ---------------%%
\ifx \pdfoutput \@undefined \else
\ifnum \pdfoutput > 0
\AtBeginDocument{%
\pdfpagewidth \paperwidth
\pdfpageheight \paperheight
}
\fi
\fi
%%--------------- End of Code --------------%%
\endinput
安装此包后,你可以说
\usepackage{pdftexpatch}
在您的主源文件中,而不是每次都插入手工制作的补丁。