Boondox カリグラフィ数学フォントと Arev 数学フォントでは、大文字と小文字の高さが同じではありません。
の答えを適応させるXeTeX/fontspec で偽の小文字大文字を作成しますか?scalebox
以前は、大文字と小文字の高さが一致するように定義して修正していました。高さの修正を含む新しいマクロと修正を除外した\mathcalbd
基本マクロの実装を以下に示します。\mathcalbdnocorr
次の 2 つの問題が発生します。
- 下付き文字と上付き文字はサポートされていません
- パッケージと競合があります
bm
\documentclass{article}
\usepackage{graphicx}
\usepackage{arevmath}
\usepackage{amsmath}
% \usepackage{bm}
\DeclareFontFamily{U}{BOONDOX-calo}{\skewchar\font=45}
\DeclareFontShape{U}{BOONDOX-calo}{m}{n}{<-> BOONDOX-r-calo}{}
\DeclareFontShape{U}{BOONDOX-calo}{b}{n}{<-> BOONDOX-b-calo}{}
\makeatletter
\DeclareMathAlphabet{\m@thcalbd}{U}{BOONDOX-calo}{m}{n}
\SetMathAlphabet{\m@thcalbd}{bold}{U}{BOONDOX-calo}{b}{n}
% https://tex.stackexchange.com/questions/55664/
\def\calfont@helper#1 #2\relax{%
\@calfont@helper#1\relax\relax%
\if\relax#2\relax\else\ \@calfont@helper#2\relax\fi}
\def\@calfont@helper#1#2\relax{%
\ifcat\relax#1#1% for escape sequences
\else%
\ifnum`#1=\lccode`#1\relax%
\mathchoice%
{\scalebox{1.20529}{$\m@th\m@thcalbd{#1}$}}%
{\scalebox{1.20529}{$\m@th\m@thcalbd{#1}$}}%
{\scalebox{.90396}{$\m@th\mkern-1.5mu\m@thcalbd{#1}$}}%
{\scalebox{.70308}{$\m@th\mkern-1.1mu\m@thcalbd{#1}$}}%
\else\m@thcalbd{#1}\fi%
\fi%
\ifx\relax#2\relax\else\@calfont@helper#2\relax\fi}
\newcommand*{\mathcalbd}[1]{\bgroup\calfont@helper#1 \relax\relax\egroup}
\newcommand*{\mathcalbdnocorr}[1]{\m@thcalbd{#1}}
\makeatother
\begin{document}
Without height correction: $A\mathcalbdnocorr{A} a\mathcalbdnocorr{a}$
With height correction: $A\mathcalbd{A} a\mathcalbd{a}$
\bigskip
Two problems with the \verb+\mathcalbd+ macro:
\begin{enumerate}
\item \verb+\mathcalbd{A_a}+ does not work while
\verb+\mathcalbdnocorr{A_a}+ does ($\mathcalbdnocorr{A_a}$). Same is
true for superscripts.
\item \verb+\boldsymbol{\mathcalbd{A}}+ ($\boldsymbol{\mathcalbd{A}}$)
does not work if package \texttt{bm} is loaded
\end{enumerate}
\end{document}
答え1
大文字と小文字に、異なるスケーリング係数を持つ 2 つのフォント ファミリを使用できます。
\documentclass{article}
\usepackage{arevmath}
\usepackage{amsmath}
\usepackage{bm}
\DeclareFontFamily{U}{BOONDOX-calo}{\skewchar\font=45 }
\DeclareFontShape{U}{BOONDOX-calo}{m}{n}{<-> s*[1.1] BOONDOX-r-calo}{}
\DeclareFontShape{U}{BOONDOX-calo}{b}{n}{<-> s*[1.1] BOONDOX-b-calo}{}
\DeclareFontFamily{U}{BOONDOX-calo-scaled}{\skewchar\font=45 }
\DeclareFontShape{U}{BOONDOX-calo-scaled}{m}{n}{<-> s*[1.20529] BOONDOX-r-calo}{}
\DeclareFontShape{U}{BOONDOX-calo-scaled}{b}{n}{<-> s*[1.20529] BOONDOX-b-calo}{}
\DeclareMathAlphabet{\mathcalupper}{U}{BOONDOX-calo}{m}{n}
\SetMathAlphabet{\mathcalupper}{bold}{U}{BOONDOX-calo}{b}{n}
\DeclareMathAlphabet{\mathcallower}{U}{BOONDOX-calo-scaled}{m}{n}
\SetMathAlphabet{\mathcallower}{bold}{U}{BOONDOX-calo-scaled}{b}{n}
\ExplSyntaxOn
\NewDocumentCommand{\mathcalbd}{m}
{{
\tl_set:Nn \l_tmpa_tl { #1 }
\regex_replace_all:nnN { [a-z] } { \{ \c{mathcallower}\{\0\} \} } \l_tmpa_tl
\mathcalupper{ \tl_use:N \l_tmpa_tl }
}}
\ExplSyntaxOff
\begin{document}
With height correction: $A\mathcalbd{A} a\mathcalbd{a}$
Subscript: $\mathcalbd{A_a} X_{a\mathcalbd{a}}$
Bold: $\bm{A} \bm{\mathcalbd{A}} \bm{a}\bm{\mathcalbd{a}}$
Bold with subscripts: $\bm{\mathcalbd{A_a}}$
\end{document}