拉丁語和希臘語中粗體直立向量的一致宏

拉丁語和希臘語中粗體直立向量的一致宏

我正在使用 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構建控制序列:say相當於打字。\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、歐米茄、歐米茄

我發布這個問題是因為我更喜歡電腦現代而不是憲章,但由於顯然電腦現代中的解決方案至少相當複雜,也許其他人可能會發現這個相對簡單的解決方案很有用。

相關內容