我可以定义一个宏\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
通过将其放在\mbox
with中\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}}