Macro consistente para vectores verticales en negrita tanto en latín como en griego

Macro consistente para vectores verticales en negrita tanto en latín como en griego

Estoy usando pdfLaTeX y quierotodoLos vectores los compuse para que estén en negrita y en posición vertical. Desafortunadamente, dependiendo de si el símbolo es latino, griego en minúscula o griego en mayúscula, existen diferentes comandos necesarios para ponerlo en negrita y vertical. Me gustaría poder definir una sola macro, digamos, \vectorde modo que haga lo que quiero sin importar el argumento y no tenga que pensar en ello:

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

Esta pregunta populartrata conalgunode este problema, pero las soluciones todavía tienen los vectores griegos minúsculas en negrita cursiva, no en negrita vertical. Muchas otras preguntas abordan este tema de diversas maneras, pero no he podido encontrar una respuesta definitiva a esta variante exacta. Quizás la respuesta sea “no puedes”, pero tampoco lo he visto definitivamente.


Editado \Alpha, que no existe, a \Omega.

Respuesta1

Una modificación de mi respuesta aComprueba automáticamente si un carácter matemático es griego o latinodebería hacer:

\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}

ingrese la descripción de la imagen aquí

¿Que es lo que \commexo_makeboldupright:nhace? Toma su entrada, por ejemplo \alpha, elimina la barra invertida del nombre con \cs_to_str:Ny construye la secuencia de control \upalphamediante \use:c: decir \use:c{upalpha}es equivalente a escribir \upalpha.

Respuesta2

Como puede ser beneficioso para otros, mencionaré la solución que uso actualmente: en un documento con muchos vectores griegos, cambio la fuente del documento de Computer Modern a Charter y uso el isomathpaquete que \mathbffunciona como se esperaba en griego. caracteres:

\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}

negrita vertical a, omega, omega

Publiqué la pregunta porque prefiero Computer Modern a Charter, pero dado que aparentemente la solución en Computer Modern es al menos bastante complicada, tal vez alguien más pueda encontrar útil esta solución comparativamente más simple.

información relacionada