TransWikia.com

How to resolve general "package clash" in Latex

TeX - LaTeX Asked by new_stacker on January 1, 2021

There are so many questions related to "package clash" in this forum, but all of them relate to specific packages (why?). For instance I use more than 50 packages in my document. Even if I would be very diligent and track internal dependencies of which package loads other packages with specific options, I would still run into "triangles", where just loading the packages in the "correct" order is not possible. Therefore, I need to ask:


Is there a general way to resolve "package clash" issue ?


EDIT:
I am writing a publication, which requires tables, figures, algorithms, different colors, captions, subcaptions, math symbols, physical units, and many others. In the end I have somewhere around 30 packages (the 50 was according to the line number, but then I realized the actual number of packages is lower).

3 Answers

The most general solution is

PassOptionsToPackage[option,more=options]{package}

before loading a package for the first time. This can ensure that it is loaded with every option it needs, even when it is loaded indirectly from another package.

It’s also useful to load a package manually before another package loads it with the wrong options. With a very few exceptions (such as fontenc), the first time a package is loaded determines what options it is loaded with. Once, as a last resort, I’ve even needed to RequirePackage before loading a documentclass, but PassOptionsToPackage is generally much better in this scenario.

Many options, such as languages, can be passed to the documentclass, which will then pass them to every other package it loads, preventing any option clash for them.

Many packages allow you to change their options with a command after loading. It might be safer for a package to load another package without explicit options, then pass it the options it needs. There are also some packages that pass through options to a package they load, such as how mathtools will accept the options of amsmath.

None of these will work in every single case. Packages might load another package with mutually-exclusive options, or package A might need to be loaded before package B, but after package C, which must be loaded after B.

Correct answer by Davislor on January 1, 2021

I guess you mean an option clash. Package xcolor is loaded by some package with option svgnames and later with option x11names, e.g.

No, there isn't a way to resolve those issues »in general«.

And package clashes are rare, because the package maintainers try to avoid them. Only 53 questions have the tag option-clash.

If you are loading yourself more than 50 packages, you'd better find out, which ones you really need. Sounds like a bloated template...

Answered by Keks Dose on January 1, 2021

There can clearly be no general solution.

If you load package A that internally uses

RequirePackage[final]{foo}

and you use another package B that uses

RequirePackage[draft]{foo}

Then you will get an option clash error and no automatic way to resolve it. You will need to decide if you want final or draft and if you decide final then you may need to not use package B at all if it requires the draft mode.

Note that this requirement is inherent in loading multiple package whether or not you get the option clash error.

If the situation is slightly different and A does

RequirePackage{foo}

and B does

RequirePackage[final]{foo}

Then you will get an option clash if you load A then B, which could be "resolved" by changing the package order and loading B then A as the latex code makes a naive assumption that it is OK to ignore a package load request that uses a subset of the options used on the first load. But changing the order avoids the error but now means package A is "unexpectedly" using the foo package with the final option which may or may not work, depending on the specifics of the code.

If you load 50 packages (really???) then you need to be responsible for any interactions, the option clash error is just a minor help in catching some possible problems. Note it is designed to be a help not a problem to be solved. It would have been easier to not implement a check.

Answered by David Carlisle on January 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP