我想使用粗体 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}
产生以下输出:
第一行恰好看起来像我想要的,但由于它似乎依赖于表达式的顺序,整个宏往往会产生错误的输出。
有什么方法可以限制这种风格吗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。