加载一个包两次可以吗(只要没有给出额外的选项)?

加载一个包两次可以吗(只要没有给出额外的选项)?

使用 \RequirePackage 两次加载包会导致“选项冲突”

多次加载包

我们看到,一个包可以被加载多次,只要没有给出选项或者没有给出不同的选项。

然而,我的问题不是这是否真的有效,或者它是否以这种方式在 LaTeX 中实现(嗯,显然是的),而是这是否是一个记录行为。

这是我在关于它的文章中发现的内容clsguide

“如果某个包总是被加载 \RequirePackage... 或者 \usepackage 那么即使它的加载请求被多次请求,它也只会加载一次。”

虽然这清楚地表明多次加载包是可以的,但是作者catoptions有不同的看法:

“你先是加载了xcolor选项cmyk,然后又没有任何选项。这导致了 LaTeX 无法捕捉的选项冲突。catoptions会突出显示它。”(来源:catoptions 导致选项与 xcolor 发生冲突

LaTeX2e 文档中还有其他关于此问题的提示吗?

显示问题的示例文档:

\documentclass{article}
\usepackage{catoptions}
\usepackage[labelfont=bf]{caption}
\usepackage{subcaption}
\begin{document}
Test
\end{document}
\documentclass{article}
\usepackage{catoptions}
\usepackage[balancingshow]{multicol}
\usepackage{doc}
\begin{document}
Test
\end{document}
\documentclass{article}
\usepackage{catoptions}
\usepackage[demo]{graphicx}
\usepackage{rotating}
\begin{document}
Test
\end{document}

所有这些示例在不使用时都可以编译成功catoptions,但使用时则会失败。

答案1

实验一:

\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage{xcolor}
\begin{document}
a
\end{document}

终端输出:

This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./exp.tex
LaTeX2e <2016/03/31> patch level 2
Babel <3.9r> and hyphenation patterns for 83 language(s) loaded.
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2016/texmf-dist/tex/latex/xcolor/xcolor.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/graphics-cfg/color.cfg)
(/usr/local/texlive/2016/texmf-dist/tex/latex/pdftex-def/pdftex.def
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/infwarerr.sty)
(/usr/local/texlive/2016/texmf-dist/tex/generic/oberdiek/ltxcmds.sty)))
No file exp.aux.
(/usr/local/texlive/2016/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) [1{/usr/local/texlive/2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./exp.aux) )</usr/local/texlive/2016/texmf-dist/fonts/type1/public/amsfonts/cm
/cmr10.pfb>
Output written on exp.pdf (1 page, 9748 bytes).
Transcript written on exp.log.

实验2:

\documentclass{article}
\usepackage[cmyk]{xcolor}
\usepackage[cmyk]{xcolor}
\begin{document}
a
\end{document}

相同的终端输出。

实验3:

\documentclass{article}
\usepackage{xcolor}
\usepackage[cmyk]{xcolor}
\begin{document}
a
\end{document}

错误:

! LaTeX Error: Option clash for package xcolor.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

实验4:

\documentclass{article}
\usepackage{catoptions}
\usepackage[cmyk]{xcolor}
\usepackage{xcolor}
\begin{document}
a
\end{document}

错误与实验 3 相同。

评论

catoptions包改变了 的定义,该定义由(和)\@fileswith@ptions内部使用。\usepackage\RequirePackage

如果没有它,手册中有关包加载的陈述是正确的:加载具有不同选项集的包会引发错误,除非第二次(或进一步)调用在第一次调用中使用原始选项集的子集(例如没有选项)。

相关内容