Текст в математическом режиме: наследовать полужирный, но не курсив

Текст в математическом режиме: наследовать полужирный, но не курсив

Могу ли я определить макрос \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}. Оба определены в «базовом» латексе, поэтому дополнительные пакеты не нужны.

редактировать:как отметил Юкка в комментарии, это лучшая из всех возможностей:

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

введите описание изображения здесь

И как отмечает Юкка в комментарии, более простое определение (требующее, amsmathно не требующее scalerelпакета), которое также масштабируется с размером математики, это

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

Связанный контент