數學模式下的文字:繼承粗體但不繼承斜體

數學模式下的文字:繼承粗體但不繼承斜體

我可以定義一個巨集嗎\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: 伯納德為打字極簡主義者提供了一種同樣有效的變體:

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

相關內容