
나는 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}
나는 Charter보다 Computer Modern을 선호하기 때문에 질문을 게시했지만 Computer Modern의 솔루션은 최소한 상당히 복잡하기 때문에 아마도 다른 누군가는 이 비교적 간단한 솔루션이 유용하다고 생각할 수도 있습니다.