¿Puedo definir una macro \foo
para 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}}
\textup
Tambié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 \textup
y \upshape
cuando 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 \mbox
with \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}
Y como señala Jukka en el comentario, una definición más simple (que requiere amsmath
pero no requiere el scalerel
paquete) que también escala con el tamaño matemático es
\newcommand{\foo}{\text{\upshape\sffamily foo}}