
Мне бы хотелось иметь команду, которая делает все жирным шрифтом (в математическом режиме), за исключением некоторого определенного списка исключений.
Например, команда \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
В противном случае один из способов сделать это — обернуть жирные символы в \boldsymbol{}
. Также можно было бы адаптировать \boldsymbol
код с amsbsy.sty
для переключения на \mathversion{normal}
вместо \mathversion{bold}
. Затем вы могли бы сделать что-то вроде \let\oldast=\ast
и \renewcommand\ast{\normalsymbol{\oldast}}
. Если вы можете создавать свои собственные математические шрифты, вы также могли бы объявить обычные и жирные шрифты как отдельные шрифты математических символов.