避免以下宏中连字符周围出现空格的最简单/最不丑陋的方法是什么?
\documentclass{article}
\newcommand{\nuSwap}{\nu-\textsf{swap}}
\begin{document}
I get $\nuSwap$, but I want $\nu$-\textsf{swap}.
\end{document}
我想要一个可以在数学模式中轻松使用的宏。
答案1
在数学模式中(如在您的 中$\nuSwap$
),-
变成减号,因此更长,并且周围有空格。只需像-
您对单词所做的那样防止 被视为数学,swap
即可得到您想要的结果,例如通过重新定义:
\newcommand{\nuSwap}{\nu\textsf{-swap}}
在这种情况下:
\documentclass{article}
\newcommand*{\nuSwap}{\ensuremath{\nu\textsf{-swap}}}
\begin{document}
You want \nuSwap, here's \(\nu\)-\textsf{swap}.
And \nuSwap ping also works in maths mode:
\[\nuSwap\]
\end{document}
给出:
答案2
如前所述,连字符在数学模式下被解释为减号。要纠正此问题,您可以定义一个\mhyphen
在数学模式下代表连字符的宏:
\mathchardef\mhyphen="2D
\newcommand{\nuSwap}{\nu\mhyphen\textsf{swap}}
当然,这可以与之结合起来,\ensuremath
得到一个在两种模式下都能起作用的宏。
如果您打算在标题中使用它并生成 pdf,我还建议您使用\texorpdfstring
(from ):hyperref
\documentclass{article}
\usepackage{hyperref}
\mathchardef\mhyphen="2D
\newcommand{\nuSwap}{\texorpdfstring{\ensuremath{\nu\mhyphen\textsf{swap}}}{nu-swap}}
\begin{document}
\section{Definition of \nuSwap}
Here we define \nuSwap:
\[
\nuSwap = \dots
\]
\end{document}
如果您检查生成的 PDF,您会发现索引中使用了“nu-swap”。
答案3
连字符应为无衬线字体。但是,\textsf{-swap}
如果在需要使用斜体的上下文中(例如定理陈述),则使用 可能会将其显示为斜体。
amsmath
安全解决方案:使用与在参数中使用连字符代替减号相同的技巧\operatorname
。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand\nuSwap{\nu\mathsf{\newmcodes@-swap}}
\makeatother
\begin{document}
I want $\nuSwap$
It also respects bold math {\boldmath$\nuSwap$}
\end{document}