Transparente Verwendung von bm und siunitx

Transparente Verwendung von bm und siunitx

Ich versuche, bmeine siunitxtransparente 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 \Oldbmanstelle 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}

Bildbeschreibung hier eingeben

verwandte Informationen