数学模式下的文本:继承粗体但不继承斜体

数学模式下的文本:继承粗体但不继承斜体

我可以定义一个宏\foo$\foo$产生:

  • 如果周围的文本为粗体,则使用粗体无衬线字体“foo”
  • 否则为正常无衬线“foo”。

特别是,“foo”永远不应该排版成斜体

MWE 不太起作用:

\documentclass[a4paper]{article}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}
\newcommand{\foo}{\textsf{foo}}
\begin{document}
\section{This should be bold: $\foo$, \boldmath$2^\foo$}
This should be normal: $\foo$, $2^\foo$.
\begin{theorem}This should be normal: $\foo$, $2^\foo$.\end{theorem}
\end{document}

在这里,我在定理环境中得到了倾斜的文本;否则它看起来不错。如果我尝试例如:

\newcommand{\foo}{\textnormal{\textsf{foo}}}

那么它始终是普通字体,而不是粗体。

我可以以某种方式“关闭斜体”而不“关闭粗体”吗?

答案1

您可以为字体规范添加一个级别\foo

\newcommand{\foo}{\textsf{\upshape foo}}

\textup也可以工作,但需要“参数”形式\textup{foo}。两者都是在“基本”乳胶中定义的,因此不需要额外的包。

编辑:正如 Jukka 在评论中指出的那样,这是所有可能性中最好的:

\text{\upshape\sffamily foo}

如果用于下标或上标,它将正确调整大小,并且可以避免以这种方式使用时\textup产生的(无意义的)字体警告。\upshape

编辑2: Bernard 还为打字极简主义者提供了一种同样有效的变体:

\textup{\sffamily foo}

答案2

您可以使用\textsf{\textup{foo}}。但是您总是在数学中使用命令看起来很奇怪。在这种情况下,我会使用\mathsf

\documentclass[a4paper]{article}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}
\newcommand{\foomath}{\mathsf{foomath}}
\newcommand\foo{\textsf{\textup{foo}}}
\begin{document}
\section{This should be bold: \mathversion{bold}$\foo \foomath$}
This should be normal: $\foo\foomath$.
\begin{theorem}This should be normal: $\foo\foomath$.\end{theorem}
\end{document}

答案3

通过将其放在\mboxwith中\upshape,可以省去斜体。但是,它不会按原样重新缩放为下标数学样式等。

\documentclass[a4paper]{article}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}
\newcommand{\foo}{\mbox{\upshape\textsf{foo}}}
\begin{document}
\section{This should be bold: $\foo$}
This should be normal: $\foo$.
\begin{theorem}This should be normal: $\foo$. still italic here\end{theorem}
\end{document}

然而,只需一点额外的工作(并采纳约瑟夫的建议),它就可以随着数学规模而扩大:

\documentclass[a4paper]{article}
\usepackage{amsmath,amsthm,scalerel}
\newtheorem{theorem}{Theorem}
\newcommand{\foo}{\scaleto{\mbox{\upshape\sffamily foo}}{1.6\LMex}}
\begin{document}
\section{This should be bold: $\foo$}
This should be normal: $\foo$ and $\foo_{\foo}$.
\begin{theorem}This should be normal: $\foo$. still italic here\end{theorem}
\end{document}

在此处输入图片描述

正如 Jukka 在评论中指出的那样,一个更简单的定义(需要amsmath但不要求scalerel包)也可以随着数学规模的扩大而扩展,那就是

\newcommand{\foo}{\text{\upshape\sffamily foo}}

相关内容