用连字符分隔符号,中间没有空格

用连字符分隔符号,中间没有空格

避免以下宏中连字符周围出现空格的最简单/最不丑陋的方法是什么?

\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}

在此处输入图片描述

相关内容