Der folgende `expl3` Code definiert `\usepackage` um, sodass die Namen aller Pakete, die über `\usepackage` geladen werden sollen, sowie alle sukzessive gegebenen Optionen, gespeichert werden. Im `\AtBeginDocument` Hook werden die Pakete dann tatsächlich geladen. (Bitte diesen Code nicht benutzen! Der "Option clash" hat schon seine Daseinsberechtigung. Das hier ist nur "Proof of Concept")
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\cs_generate_variant:Nn \str_case:nnTF { nV }
\tl_new:N \g_felix_packages_tl
\seq_new:N \g_felix_packages_seq
\cs_set_eq:NN \felix_saveusepackage:w \usepackage
\cs_new_protected:Npn \felix_usepackage:vn \felix_usepackage:nn #1#2
{
\exp_after:wN \felix_saveusepackage:w
\exp_after:wN \felix_saveusepackage:w [ \cs:w #1 \cs_end: ] { #2 }
}
\cs_generate_variant:Nn \felix_usepackage:nn { vn }
\cs_new_protected:Npn \felix_addpackage:nn #1#2
{
\str_case:nVTF { #2 } \g_felix_packages_tl
{
\tl_gput_right:cn { g_felix_#2_tl } { #1, }
}
{
\tl_new:c { g_felix_#2_tl }
\tl_gput_right:cn { g_felix_#2_tl } { #1, }
\tl_gput_right:Nn \g_felix_packages_tl { {#2}{} }
\seq_gput_right:Nn \g_felix_packages_seq { #2 }
}
}
\cs_new_protected:Npn \felix_loadpackages:
{
\seq_map_inline:Nn \g_felix_packages_seq
{
\felix_usepackage:vn { g_felix_##1_tl } { ##1 }
}
}
\RenewDocumentCommand \usepackage { O{} m }
{
\felix_addpackage:nn { #1 } { #2 }
}
\AtBeginDocument
{
\felix_loadpackages:
}
\ExplSyntaxOff
\usepackage{xcolor}
\usepackage[dvipsnames]{xcolor}
\usepackage[breaklinks]{hyperref}
\usepackage[unicode]{hyperref}
\begin{document}
\end{document}
---
Wer sich mit `expl3` auskennt kann mir vielleicht sagen, wie ich diese Zeile verbessern kann:
\exp_after:wN \felix_saveusepackage:w
\exp_after:wN [ \cs:w #1 \cs_end: ] { #2 }\end{document}