Texto em modo matemático: herda negrito, mas não itálico

Texto em modo matemático: herda negrito, mas não itálico

Posso definir uma macro \foopara que $\foo$produza:

  • negrito sem serifa "foo", se o texto ao redor estiver em negrito
  • normal sem serifa "foo" caso contrário.

Em particular, "foo" nunca deve ser escrito emitálico.

MWE que não funciona bem:

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

Aqui obtenho texto inclinado no ambiente do teorema; caso contrário, parece bom. Se eu tentar, por exemplo:

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

então está sempre em fonte normal, sem negrito.

Posso de alguma forma "desligar o itálico" sem "desligar o negrito"?

Responder1

você pode adicionar mais um nível à especificação da fonte para \foo:

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

\textuptambém funcionaria, mas requer a forma de "argumento", \textup{foo}. ambos são definidos em látex "básico", portanto não são necessários pacotes extras.

editar:conforme apontado por Jukka em um comentário, esta é a melhor de todas as possibilidades:

\text{\upshape\sffamily foo}

ele será dimensionado corretamente se usado em subscritos ou sobrescritos e evitará um aviso de fonte (sem sentido) produzido por ambos \textupe \upshapequando usado dessa maneira.

editar 2: Bernard fornece uma variação para os minimalistas de digitação que também funciona:

\textup{\sffamily foo}

Responder2

Você pode usar \textsf{\textup{foo}}. Mas parece estranho que você use seu comando sempre em matemática. Neste contexto eu usaria \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}

Responder3

Ao colocá-lo em um \mboxwith \upshape, dispensa o itálico. No entanto, ele não será redimensionado para estilos matemáticos subscritos e similares, como está.

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

No entanto, com apenas um pouco de trabalho extra (e também seguindo a sugestão de Joseph), ele pode ser dimensionado com o tamanho matemático:

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

insira a descrição da imagem aqui

E como Jukka aponta no comentário, uma definição mais simples (exigindo amsmathmas não exigindo o scalerelpacote) que também é dimensionada com o tamanho matemático é

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

informação relacionada