例外/除外リストを使用してすべての記号を太字にする

例外/除外リストを使用してすべての記号を太字にする

指定された例外リストを除いて、すべてを太字にするコマンド(数式モード)が欲しいです。

例えば、\boldformula括弧以外のすべての記号を太字にするコマンドは、

\boldformula{ a \ast ( b \ast c) }

と同等になります

\bm{a \ast} ( \bm{b \ast c} )

なにか提案を?

編集:egreg からのコメントに応えて、太字の数式が、配置や区切り文字などを維持しながら、他の数式環境と調和して共存できるようにしたいと思います。

もっと簡単なら、一部の記号を選択的に太字にするコマンドも便利です。たとえば、標準の数式フォント、\ast、\subset、\cap の英数字を太字にして、その他はそのままにするコマンドでも、非常に役立ちます。

答え1

これは概念実証です:

\documentclass{article}
\usepackage{amsmath,bm}
%\usepackage{xparse} % not needed for LaTeX 2020-10-01 or later

\ExplSyntaxOn

\cs_new_protected:Nn \vigolo_embolden_command:N
 {
  \cs_set_eq:cN { __vigolo_ \cs_to_str:N #1 : } #1
  \cs_set_protected:Npn #1 { \bm { \use:c { __vigolo_ \cs_to_str:N #1 : } } }
 }

\cs_new_protected:Nn \vigolo_embolden_char:n
 {
  \exp_args:Nc \mathchardef { __vigolo_#1: } = \mathcode`#1 \scan_stop:
  \cs_set_protected:cn { __vigolo_#1_bold: } { \bm { \use:c { __vigolo_#1: } } }
  \char_set_active_eq:nc { `#1 } { __vigolo_#1_bold: }
  \mathcode`#1 = "8000 \scan_stop:
 }

\cs_new_protected:Nn \vigolo_embolden:
 {
  \clist_map_function:nN
   {% fill up
    A,B,C,D,
    a,b,c,d,
    *,+,-,
   }
   \vigolo_embolden_char:n
  \clist_map_function:nN
   {% fill up
    \ast,\langle,\rangle,\rightarrow,\to,\subset,
   }
   \vigolo_embolden_command:N
 }

\NewDocumentCommand{\boldformula}{m}
 {
  \group_begin:
  \vigolo_embolden:
  #1
  \group_end:
 }

\ExplSyntaxOff

\begin{document}

$\boldformula{ a \ast ( b \ast c)\subset A }+abc$

$\bm{ a \ast ( b \ast c)\subset A }+abc$ (for comparison)

\end{document}

のスコープ内では、特定のオブジェクトのみが太字に宣言されます\boldformula。区切り文字については、さらに作業が必要になると思います。

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

答え2

ではunicode-math、オプションを使用して、より軽量な数学ファミリをロードできますrange=。次に例を示します。

\documentclass{article}
\usepackage{unicode-math}

\setmathfont{XITS Math Bold}
\setmathfont{XITS Math}[range=\ast]

\begin{document}
\[ A \ast B \ast C \]
\end{document}

Minion Math と KP Math は、複数のウェイトが用意されているフォント ファミリです。

残念ながら、 2020 年現在、 のrange=およびversion=引数は\setmathfont互いに互換性がありません。したがって、これを行うと、 または も使用できなくなります\boldmath\boldsymbol これにより、これをオン/オフを切り替えられる数式スタイルとして定義できなくなります。

それ以外の場合、これを実現する 1 つの方法は、太字の記号を で囲むことです。 のコードをの代わりに に変更\boldsymbol{}することもできます。その後、やのような操作を実行できます。独自の数式フォントを作成できる場合は、通常のフォントと太字のフォントを別々の数式記号フォントとして宣言することもできます。\boldsymbolamsbsy.sty\mathversion{normal}\mathversion{bold}\let\oldast=\ast\renewcommand\ast{\normalsymbol{\oldast}}

関連情報