Seite 1 von 1

physics und tippuni

Verfasst: Di 28. Okt 2025, 12:33
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}

Re: physics und tippuni

Verfasst: Di 28. Okt 2025, 13:42
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

Re: physics und tippuni

Verfasst: Mi 29. Okt 2025, 11:17
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!

Re: physics und tippuni

Verfasst: Mi 29. Okt 2025, 11:53
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