physics und tippuni

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


elijahbaley
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 9. Okt 2025, 10:04

physics und tippuni

Beitrag von elijahbaley »

Moin,

ich bin auf ein interessantes Problem gestoßen:

Wenn ich physics (wird in meinem allgemeinen style geladen) lade und dann tipauni (ja, ich möchte tatsächlich Lautschrift setzen) gibt es einen Fehler.

Sowohl physics als auch tipauni definieren den Befehl \tr
physics \DeclareDocumentCommand\tr{}{\trace}
tippuni \tipaunicmd{\tr}{Ëž} mit \tipaunicmd

Die Reihenfolge scheint wichtig zu sein.
tippuni - physics -> kein Fehler, \tr habe ich nicht getestet, weil ich in physics mit der Alternative \Tr arbeiten könnten.
physics - tipauni _> Fehler.

Ich habe auch versucht, das Command \tr auf undefined zu setzen, dies ergibt aber einen Fehler, dass assoziierte Command nicht mit gelöscht wurden.

Grüße
LP

MWE 1 : ursprünglicher Fehler
\documentclass{article}

\usepackage{siunitx}
\usepackage{physics}

\usepackage{tipauni}

\begin{document}
	test

\end{document}
MWE 2: Scheinbar funktioniert es
\documentclass{article}

\usepackage{tipauni}%
	
\usepackage{siunitx}
\usepackage{physics}

\begin{document}
	test

\end{document}
MWE 3: löschen geht nicht.
\documentclass{article}

\usepackage{siunitx}
\usepackage{physics}


\IfPackageLoadedTF{physics}{%
	\typeout{Undefine tr}
	\let\tr\undefined%
	\usepackage{tipauni}%
}{%
	\typeout{load direct}%
	\usepackage{tipauni}%
}

\begin{document}
	test

\end{document}

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2796
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: physics und tippuni

Beitrag von Stefan Kottwitz »

Ja, wenn zwei Pakete den gleichen Befehl definieren, gibt es eine Kollision. Entweder sie machen es fehlerfrei, und entscheiden sich zwischen Redefinition oder es bei Existenz nicht neu zu definieren, oder sie definieren es einfach naiv und dann kommt ein Fehler.

Ja, die naheliegendste Lösung ist, die Reihenfolge zu vertauschen. Auch kommt es im Grunde an, dass, wenn Du das doppelt definierte Makro verwenden möchtest (oder das Paket es braucht), die Reihenfolge so zu wählen, dass man das Gewünschte kriegt. Oder man "rettet" es mit \let auf einen anderen Makro-Namen, bevor man das zweite Paket lädt. Zurückschreiben (mit \let) geht danach auch noch.

Stefan

latex3

Re: physics und tippuni

Beitrag von latex3 »

\let sollte man in LaTeX eher nicht mehr verwenden, weil es beispielsweise mit allen per \NewDocumentCommand definierten Befehle rasch schief geht. Tipp: ltnews.pdf regelmäßig lesen!

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2796
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: physics und tippuni

Beitrag von Stefan Kottwitz »

Dann kennst Du vllt. eine Alternative zu \let, die mit \NewDocumentCommand funktioniert?

Dass \NewDocumentCommand robuste Befehle definiert, ist mir bekannt (z.B. aus der xparse-Doku, Josephs Blog und Artikel, was jetzt nicht irgendwo \let erwähnt, man kann es halt schlussfolgern). Wenn Du eine ltnews-Nummer kennst, die das direkt sagt und vllt. Alternative nennt, poste gern mal den Link.

\LetLtxMacro könnte sich evtl. eignen, das verträgt robuste Makros, ist aber nur für \DeclareRobustCommand, \newrobustcmd, \renewrobustcmd und \robustify (und natl. \newcommand, \newenvironment, \renewcommand, \renewenvironment) dokumentiert, jetzt nicht explizit für \NewDocumentCommand.

Stefan

Antworten