Texto en modo matemático: hereda negrita pero no cursiva

Texto en modo matemático: hereda negrita pero no cursiva

¿Puedo definir una macro \foopara que $\foo$produzca:

  • negrita sans-serif "foo", si el texto circundante está en negrita
  • de lo contrario, sans-serif normal "foo".

En particular, "foo" nunca debe escribirse encursiva.

MWE que no funciona del todo:

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

Aquí obtengo texto inclinado en el entorno del teorema; por lo demás se ve bien. Si intento, por ejemplo:

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

entonces siempre estará en fuente normal, no en negrita.

¿Puedo de alguna manera "desactivar la cursiva" sin "desactivar la negrita"?

Respuesta1

puede agregar un nivel más a la especificación de fuente para \foo:

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

\textupTambién funcionaría, pero requiere la forma de "argumento" \textup{foo}. ambos están definidos en látex "básico", por lo que no se necesitan paquetes adicionales.

editar:como señaló Jukka en un comentario, esta es la mejor de todas las posibilidades:

\text{\upshape\sffamily foo}

tendrá el tamaño correcto si se usa en subíndices o superíndices, y evitará una advertencia de fuente (sin sentido) que producen ambos \textupy \upshapecuando se usa de esta manera.

edición 2: Bernard ofrece una variación para los minimalistas que escriben que también funciona:

\textup{\sffamily foo}

Respuesta2

Puedes usar \textsf{\textup{foo}}. Pero parece extraño que estés usando tu comando siempre en matemáticas. En este contexto yo usaría \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}

Respuesta3

Al ponerlo en un \mboxwith \upshape, prescinde de las cursivas. Sin embargo, no cambiará la escala a estilos matemáticos con subíndices y similares, tal como están.

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

Sin embargo, con sólo un poco de trabajo extra (y también siguiendo la sugerencia de Joseph), se puede hacer a escala con el tamaño 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}

ingrese la descripción de la imagen aquí

Y como señala Jukka en el comentario, una definición más simple (que requiere amsmathpero no requiere el scalerelpaquete) que también escala con el tamaño matemático es

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

información relacionada