라틴어와 그리스어 모두에서 굵은 직립 벡터에 대한 일관된 매크로

라틴어와 그리스어 모두에서 굵은 직립 벡터에 대한 일관된 매크로

나는 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의 솔루션은 최소한 상당히 복잡하기 때문에 아마도 다른 누군가는 이 비교적 간단한 솔루션이 유용하다고 생각할 수도 있습니다.

관련 정보