在什么情况下,最好在其他代码之后加载包?

在什么情况下,最好在其他代码之后加载包?

我总是将所有包紧跟在文档类之后,然后设置信息(\hypersetup例如)和对我的文档的自定义(例如,页眉和页脚自定义)以及在文档中使用的宏。

是否存在您想要在加载包之前加载代码的情况?

这回答了指出,为了清楚起见,您可能希望在包之后立即设置信息,以减少您必须执行的文档量(例如,我应该移动\hypersetup到紧随其后\usepackage{hyperref},但在任何跟在它后面的包之前,achemso或者cleverref或其他什么)

我以为所有的包都必须先加载,但在某些情况下,你需要在它们之前加载代码,例如 你需要设置 \author、、\title以及\date在加载titling包之前。

那么,在加载包之前编写一些代码在哪些情况下从技术上来说更好(或必须)呢?我说的从技术上来说更好,是指对编译器产生影响,而不仅仅是对后来阅读代码的人产生影响。

答案1

在加载包之前需要一些代码的一种情况是防止名称冲突。举个小例子:假设您正在使用 AMS 文档类之一,并且想要使用来自dingbat包,说\leftpointright;然后你尝试

\documentclass{amsart}
\usepackage{dingbat}

\begin{document}

\leftpointright

\end{document}

并收到以下错误

! LaTeX Error: Command \checkmark already defined.
               Or name \end... illegal, see p.192 of the manual.

问题在于,amsfontsAMS 类内部加载的包定义了该命令,\checkmarkdingbat包也定义了该命令,从而产生了名称冲突。一种可能的解决方案是使用savesym包,重命名冲突的符号,然后加载 dingbat 包:\savesymbol{XXX}将符号从 重命名为\XXX从而\origXXX防止名称冲突:

\documentclass{amsart}
\usepackage{savesym}
\savesymbol{checkmark}
\usepackage{dingbat}

\begin{document}

\leftpointright

\end{document}

在此处输入图片描述

Scott Pakin 广泛使用了这种技术来构建综合 LaTeX 符号列表

savesym出于好奇,与该包关联的文件是,savesym.sty但该包显示

\ProvidesPackage{savesymbol}[2003/06/01v1.1 Saves and restores symbols]

因此您在使用该包时会收到一个(无害的)警告:

LaTeX Warning: You have requested package `savesym',
               but the package provides `savesymbol'.

答案2

biblatex包使用\parindent来初始化\bibhang控制参考书目条目的悬挂缩进的长度。如果您希望\parindent\bibhang匹配,则对 的任何更改\parindent都应在加载 之前进行biblatex

\documentclass{article}

\setlength{\parindent}{2.25em}

\usepackage[style=authoryear]{biblatex}

\newcommand*{\sometext}{Lorem ipsum dolor sit amet, consectetuer
    adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
    adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
    libero, nonummy eget, consectetuer id, vulputate a, magna.}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
  addendum ={\sometext}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\sometext

\printbibliography

\end{document}

在此处输入图片描述

相关内容