physics und tippuni

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


elijahbaley
Forum-Newbie
Forum-Newbie
Beiträge: 5
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: 2799
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: 2799
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

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

Re: physics und tippuni

Beitrag von elijahbaley »

Sorry für die späte Antwort.

Danke.
Ok, also bleib' ich erst einmal beim Vertauschen. Muss mir dann für den style die zweite Variante nochmal genauer ansehen.

Grüße
LP

latex3

Re: physics und tippuni

Beitrag von latex3 »

→ Provide a way to copy robust commands. . . in Issue 32. Eine ganz neue Erkenntnis ist das also nicht, sondern schon seit 5 Jahren, wobei es so richtig eigentlich erst seit November 2021 funktioniert → Issue 34. Wie gesagt: Es lohnt sich, das komplette ltnews.pdf mal durchzublättern, wobei ich empfehlen würde, es von hinten nach vorn durchzublättern, weil man sich dann veraltete Dinge sparen kann. Inzwischen sind reichlich LaTeX-Befehle aus der Benutzerschnittstelle robust. Auch Klassen und Pakete verwenden immer häufiger \NewDocumentCommand. Daher ist die Verwendung von \let auf Anwenderebene inzwischen wirklich nicht mehr zu empfehlen.

Und gerade wenn man einen Befehl, der per \DeclareDocumentCommand definiert wurde, kopieren will, ist \let eine eher schlechte Idee.

Antworten