ラテン文字とギリシャ文字の両方で太字の直立ベクトルの一貫したマクロ

ラテン文字とギリシャ文字の両方で太字の直立ベクトルの一貫したマクロ

私はpdfLaTeXを使っていますが、全てベクトルは太字の直立フォントでタイプセットします。残念ながら、シンボルがラテン文字、小文字のギリシャ語、大文字のギリシャ語のいずれであるかによって、太字で直立にするために必要なコマンドが異なります。\vector引数に関係なく必要なことを実行し、考える必要がないように、たとえば、単一のマクロを定義できるようにしたいと思います。

\vector{a}       =>  \mathbf{a}
\vector{\alpha}  =>  \boldsymbol{\upalpha}
\vector{\Omega}  =>  \boldsymbol{\Omega}

このよくある質問扱ういくつかのこの問題の解決策はありますが、その解決策では小文字のギリシャ文字のベクトルが太字の斜体のままで、太字の直立体ではありません。この問題については、他にもさまざまな方法で触れている質問がたくさんありますが、このバリエーションに対する明確な答えを見つけることができませんでした。おそらく答えは「できない」でしょうが、私もその明確な答えは見たことがありません。

—存在しない を に
編集しました。\Alpha\Omega

答え1

私の回答の修正数式文字がギリシャ文字かラテン文字かを自動的にチェックするすべきこと:

\documentclass{article}
\usepackage{xparse}
\usepackage{bm,upgreek}

\ExplSyntaxOn
\NewDocumentCommand\Vector{m}
 {
  \commexo_vector:n { #1 }
 }

\cs_new_protected:Npn \commexo_vector:n #1
 {
  \tl_map_inline:nn { #1 }
   {
    \commexo_vector_inner:n { ##1 }
   }
 }

\cs_new_protected:Npn \commexo_vector_inner:n #1
 {
  \tl_if_in:VnTF \g_commexo_latin_tl { #1 }
   {% we check whether the argument is a Latin letter
    \mathbf { #1 } % a Latin letter
   }
   {% if not a Latin letter, we check if it's an uppercase Greek letter
    \tl_if_in:VnTF \g_commexo_ucgreek_tl { #1 }
     {
      \bm { #1 } % a Greek uppercase letter
     }
     {% if not, we check if it's a lowercase Greek letter
      \tl_if_in:VnTF \g_commexo_lcgreek_tl { #1 }
       {
        \commexo_makeboldupright:n { #1 }
       }
       {% none of the above, just issue #1
        #1 % fall back
       }
     }
   }
 }

\cs_new_protected:Npn \commexo_makeboldupright:n #1
 {
  \bm { \use:c { up \cs_to_str:N #1 } }
 }

\tl_new:N \g_commexo_latin_tl
\tl_new:N \g_commexo_ucgreek_tl
\tl_new:N \g_commexo_lcgreek_tl
\tl_gset:Nn \g_commexo_latin_tl
 {
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
  abcdefghijklmnopqrstuvwxyz
 }
\tl_gset:Nn \g_commexo_ucgreek_tl
 {
  \Gamma\Delta\Theta\Lambda\Pi\Sigma\Upsilon\Phi\Chi\Psi\Omega
 }
\tl_gset:Nn \g_commexo_lcgreek_tl
 {
  \alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa
  \lambda\mu\nu\xi\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega
  \varepsilon\vartheta\varpi\varphi\varsigma\varrho
 }

\ExplSyntaxOff
\begin{document}
$\Vector{X}\Vector{\Lambda}\Vector{\alpha}\Vector{\beta}$

$\Vector{X\Lambda}$
\end{document}

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

は何\commexo_makeboldupright:nをしますか? 入力、たとえば を受け取り\alpha、 を使用して名前からバックスラッシュを取り除き、を介して\cs_to_str:N制御シーケンスを構築します。つまり、 は と入力するのと同等です。\upalpha\use:c\use:c{upalpha}\upalpha

答え2

他の人の役に立つかもしれないので、私が現在使用している解決策について説明します。ギリシャ語のベクトルが多数含まれるドキュメントでは、ドキュメントのフォントを Computer Modern から Charter に切り替えて、パッケージを使用します。isomathこれにより、\mathbfギリシャ語の文字が期待どおりに機能します。

\documentclass{article}

\usepackage[charter,cal=cmcal]{mathdesign}
\usepackage[OMLmathrm,OMLmathbf]{isomath}
\newcommand{\vect}[1]{\mathbf{#1}}    

\begin{document}
    $\a$, $\omega$, $\Omega$

    $\vect a$, $\vect\omega$, $\vect\Omega$
\end{document}

太字の直立 a、オメガ、オメガ

私は Charter よりも Computer Modern を好むためこの質問を投稿しましたが、どうやら Computer Modern のソリューションは少なくともかなり複雑なので、おそらく他の誰かがこの比較的単純なソリューションを役に立つと思うかもしれません。

関連情報