Могу ли я определить макрос \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
Если поместить его в \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}
И как отмечает Юкка в комментарии, более простое определение (требующее, amsmath
но не требующее scalerel
пакета), которое также масштабируется с размером математики, это
\newcommand{\foo}{\text{\upshape\sffamily foo}}