数式モードのテキスト: 太字は継承されますが、斜体は継承されません

数式モードのテキスト: 太字は継承されますが、斜体は継承されません

\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

フォント仕様にもう 1 つのレベルを追加できます\foo

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

\textupも動作しますが、「引数」形式が必要です。\textup{foo}どちらも「基本的な」LaTeX で定義されているため、追加のパッケージは必要ありません。

編集:Jukka がコメントで指摘したように、これがあらゆる可能性の中で最善の策です。

\text{\upshape\sffamily foo}

下付き文字または上付き文字で使用するとサイズが正しく調整され、この方法で使用すると\textupとの両方で生成される (意味のない) フォント警告が回避されます。\upshape

編集2: Bernard は、タイピング ミニマリスト向けに、同様に機能するバリエーションを提供しています。

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

ただし、少しだけ追加作業を行うと (Joseph の提案も取り入れると)、数学のサイズに合わせてスケーリングすることができます。

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

ここに画像の説明を入力してください

そして、Jukkaがコメントで指摘しているように、より単純な定義(パッケージは必要amsmathだがパッケージは不要scalerel)で、数学のサイズに合わせてスケールするものは次のようになります。

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

関連情報