Wie in meiner früheren Frage kriege ich auch in anderen Fällen manchmal den Fehler

Code, hier editierbar zum Übersetzen:
! LaTeX Error: Command \XXX already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

\XXX ist mal dieser oder jener Befehl, je nach Paketen, scheint dann ein Konflikt zwischen Paketen oder einem Paket und der Klasse sein. Hat sich immer durch Herausnehmen eines Pakets lösen lassen. Wenn ich ein bestimmtes Paket dennoch haben will, lässt sich das Problem im Allgemeinen irgendwie lösen? Egal ob ich jetzt eine Version eines doppelt definierten Makros "verliere" - gerade wenn ich dieses gar nicht brauche.

gefragt 01 Dez '13, 17:31

Student's gravatar image

Student
5807779104
Akzeptiert-Rate: 82%

bearbeitet 01 Dez '13, 17:33

1

Wenn Du das Makro in Version eins sicher nicht brauchst, reicht in der Regel \let\XXX\relax bevor man das Paket lädt, das die zweite Version definiert. In Ausnahmefällen (wenn z.B. etwas at begin document passiert) muss man ein klein wenig kreativer werden.

(01 Dez '13, 17:34) cgnieder

Ich behelfe mich jetzt mit diesem Workaround direkt vor dem Laden des konfliktenden Pakets:

Code, hier editierbar zum Übersetzen:
\makeatletter
\let\XXX\relax
\makeatother
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

\XXX ist dabei das bemängelte Makro. Das \makeatletter und \makeatother wird nur gebraucht, wenn es ein interner Befehl ist, der das Zeichen @ enthält.

Permanenter link

beantwortet 01 Dez '13, 17:34

Student's gravatar image

Student
5807779104
Akzeptiert-Rate: 82%

bearbeitet 01 Dez '13, 17:36

Die Konflikte zwischen Paketen können zahlreich sein. Selbst wenn wir uns darauf beschränken, dass es sich um gleich benannte Makros handelt, können die Auswirkungen unterschiedlich sein. Ein Fall wie der genannte, in dem es die Fehlermeldung

Code, hier editierbar zum Übersetzen:
! LaTeX Error: Command \foo already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gibt, ist eigentlich ganz gut, dann weiß man wenigstens, was los ist. xparse bringt übrigens eine leicht veränderte Meldung:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/command-already-defined"
!
! Command '\foo' already defined!
!
! See the LaTeX3 documentation for further information.
!
! For immediate help type H <return>.
!...............................................
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Wenn man weiß, dass man die eine Version nicht braucht, dann kann man sie meistens mit \let\foo\relax „unschädlich“ machen:

Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{newtxmath}
\let\vary\relax
\usepackage{exsheets}
\begin{document}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ob das immer funktioniert, hängt aber vom konkreten Einzelfall ab. (Vielleicht ist die „unschädlich“ gemachte Version essentiell wichtig für Paket Nummer eins...?)

Wenn man die erste Version speichern möchte, nur für den Fall, dann kann man meistens etwas wie \let\OLDfoo\foo einsetzen, bevor man \foo auf \relax setzt:

Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{newtxmath}
\newcommand*\NTXvary{}
\let\NTXvary\vary
\let\vary\relax
\usepackage{exsheets}
\begin{document}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Damit wäre die ursprüngliche Bedeutung noch abrufbar. (Auch das kann schiefgehen und hängt wieder vom konkreten Einzelfall ab).

Das Paket savesym liefert dafür übrigens eine Schnittstelle, die manche vielleicht bequemer finden:

Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{savesym}
\usepackage{newtxmath}
\savesymbol{vary}% \vary als \origvary weiter verfügbar
\usepackage{exsheets}
\restoresymbol{exs}{vary}% \vary hat wieder vorige Bedeutung, neue jetzt als
% \exsvary gespeichert
\begin{document}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Nicht immer führen Konflikte übrigens zu Fehlermeldungen:

Code, hier editierbar zum Übersetzen:
% arara: xelatex
\documentclass{article}
\usepackage{unicode-math}
\usepackage{exsheets}
\begin{document}
\begin{question}
foo
\end{question}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 01 Dez '13, 18:24

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

2

Und nicht zu vergessen: Auch \let funktioniert nicht bei Makros mit optionalen Argumenten (und, lese ich gerade, bei Macros, die mit \DeclareRobustCommand definiert wurden). Heiko Oberdieks letltxmacro hilft dann in vielen Fällen, aber leider auch nicht immer weiter.

(25 Dez '13, 02:12) Speravir

Stimmt. Aber da es ja so viele verschiedene Fälle gibt, in denen der oben beschriebene Ansatz nicht funktioniert, hab ich das absichtlich nicht mit in meine Antwort genommen

(25 Dez '13, 07:55) cgnieder
Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×128
×48

gestellte Frage: 01 Dez '13, 17:31

Frage wurde gesehen: 28,482 Mal

zuletzt geändert: 25 Dez '13, 07:56

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×