Ich versuche, bm
eine siunitx
transparente Nutzung der Pakete basierend auf dieser Antwort zu erreichen:bm und siunitx stimmen nicht überein
\documentclass{article}
\usepackage{bm,siunitx}
\newif\ifbm
\bmfalse
% New bm
\let\Oldbm\bm
\renewcommand{\bm}[1]{%
\bmtrue\Oldbm{#1}\bmfalse}
% New num
\let\Oldnum\num
\renewcommand{\num}[2][]{%
\ifbm\Oldbm[math-rm=\mathbf,#1]{#2}%
\else\Oldbm{#2}%
\fi}
% New SI
\let\OldSI\SI
\renewcommand{\SI}[2][]{%
\ifbm\OldSI[
math-rm=\mathbf,
number-unit-product={\mbox{\bfseries\,}},#1
]{#2}%
\else\OldSI{#2}%
\fi}
\begin{document}
$\bm{bob\num{5}\SI{30}{\km}}$
\end{document}
Aber ich habe diese Fehlermeldung:
! Improper alphabetic constant.
<to be read again>
\reserved@d
l.25 $\bm{bob\num{5}}
$
Antwort1
Ihr Code enthält Fehler. Sie verwenden beispielsweise in der Definition \Oldbm
anstelle von . Und hat drei Argumente, nicht zwei.\Oldnum
\num
\SI
Ein funktionierender Code wäre der folgende. Beachten Sie, dass beide Befehle optionale Argumente haben und daher fragil sind. Sie müssen daher durch eine Klammer geschützt werden. Imho gewinnen Sie also nicht viel im Vergleich zuhttps://tex.stackexchange.com/a/416405/2388
\documentclass{article}
\usepackage{bm,siunitx}
\newif\ifbm
\bmfalse
% New bm
\let\Oldbm\bm
\renewcommand{\bm}[1]{%
\bmtrue\Oldbm{#1}\bmfalse}
% New num
\let\Oldnum\num
\renewcommand{\num}[2][]{%
\ifbm {\Oldnum[math-rm=\mathbf,#1]{#2}}%
\else \Oldnum[#1]{#2}%
\fi}
% New SI
\let\OldSI\SI
\renewcommand{\SI}[3][]{%
\ifbm{\OldSI[
math-rm=\mathbf,
number-unit-product={\mbox{\bfseries\,}},#1
]{#2}{#3}}%
\else\OldSI[#1]{#2}{#3}%
\fi}
\begin{document}
\num{5} \SI{30}{\km}
$\bm{bob}$
$\bm{{\num{5}}}$
$\bm{bob{\num{5}\SI{30}{\km}}}$
\end{document}