\bm 命令影响其他宏

\bm 命令影响其他宏

我想使用粗体 sf-fonts 来指定一种特殊类型的变量。我通过使用包bm然后将其包装\mathsf起来来实现这一点\bm

不幸的是,这种方法的副作用是,其他文本也会以粗体打印,但仅限于特定情况。整个事情相当奇怪。

\documentclass{acmart}
\usepackage{bm}

\newcommand{\mybold}[1]{\ensuremath{\bm{\mathsf{#1}}}}
\newcommand{\func}[1]{\mathit{func}\left(#1\right)}
\newcommand{\xy}{\mybold{xy}}

\begin{document}
\begin{align*}
    \func{a~\xy}
    \func{a} 
\end{align*}
\begin{align*}
    \func{a} 
    \func{a~\xy}
\end{align*}
\begin{align*}
    \func{a~\xy}\\
    \func{a} 
\end{align*}
\begin{align*}
    \func{a} \\
    \func{a~\xy}
\end{align*}
\end{document}

产生以下输出:

latex 代码的输出

第一行恰好看起来像我想要的,但由于它似乎依赖于表达式的顺序,整个宏往往会产生错误的输出。

有什么方法可以限制这种风格吗xy

答案1

这是一个错误,将在下一个 LaTeX 版本中解决https://github.com/latex3/latex2e/issues/1028

作为一种解决方法,您现在可以添加\setcounter{localmathalphabets}{0}

\documentclass{acmart}
\usepackage{bm}

\newcommand{\mybold}[1]{\ensuremath{\bm{\mathsf{#1}}}}
\newcommand{\func}[1]{\mathit{func}\left(#1\right)}
\newcommand{\xy}{\mybold{xy}}
\setcounter{localmathalphabets}{0}

\begin{document}
\begin{align*}
    \func{a~\xy}
    \func{a} 
\end{align*}
\begin{align*}
    \func{a} 
    \func{a~\xy}
\end{align*}
\begin{align*}
    \func{a~\xy}\\
    \func{a} 
\end{align*}
\begin{align*}
    \func{a} \\
    \func{a~\xy}
\end{align*}
\end{document}

在此处输入图片描述

答案2

我认为你不需要bm这个目的。

\documentclass{acmart}

\DeclareMathAlphabet{\mathbfsf}{\encodingdefault}{\sfdefault}{b}{n}
\newcommand{\mybold}[1]{\mathsf{#1}}
\newcommand{\func}[1]{\mathit{func}(#1)}
\newcommand{\xy}{\mathbfsf{xy}}

\begin{document}

\begin{align*}
    \func{a\,\xy}
    \func{a}
\\
    \func{a}
    \func{a\,\xy}
\\
    \func{a\,\xy}\\
    \func{a}
\\
    \func{a} \\
    \func{a\,\xy}
\end{align*}

\end{document}

在此处输入图片描述

如果没有加载bm,数学组的数量就会减少到 12。

相关内容