Posso definir uma macro \foo
para 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}}
\textup
també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 \textup
e \upshape
quando 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 \mbox
with \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}
E como Jukka aponta no comentário, uma definição mais simples (exigindo amsmath
mas não exigindo o scalerel
pacote) que também é dimensionada com o tamanho matemático é
\newcommand{\foo}{\text{\upshape\sffamily foo}}