添加

添加

请查看以下文件:

\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例如hyperrefgeometry所有驱动程序选项,如dvipspdftex,也有启发式方法来猜测默认驱动程序。

答案2

问题是众所周知的:由于它们是在唯一可用的输出格式是 DVI 时设计的,因此在生成 PDF 输出时,标准类不会费心设置 PDF 页面尺寸\pdfpagewidth和,因此无法使它们与内部 LaTeX2e 尺寸和\pdfpageheight“同步” 。另一方面,现代 PDF 感知包纠正了这一行为。您可以加载包(也许使用选项)而不是,这样可以避免篡改文本尺寸和边距。或者,如果您想完全避免使用包,您也可以在源文件中包含一个手工制作的协议:\paperwidth\paperheighthyperrefgeometrypass

\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}

在您的主源文件中,而不是每次都插入手工制作的补丁。

相关内容