Loop sobre letras gregas com pgffor

Loop sobre letras gregas com pgffor

Atualmente estou combinando soluções propostasaquipara a definição de loop de comandos eaquipara a letra maiúscula forçando a definir notações matemáticas em um loop.

O objetivo é ter um atalho para todas as letras dos alfabetos latino e grego em negrito e maiúsculas/minúsculas.

Para o alfabeto latino a solução atual funciona bem, mas para o grego não funciona.

Então, na verdade, tenho duas perguntas aqui:

  • 1: É possível fazer um loop automático nas letras gregas com pgffor, assim como nas letras latinas
  • 2: Existe uma razão para minha solução atual não funcionar com letras gregas

Como sempre, a resposta pode ser muito curta ou muito longa, por isso agradecemos antecipadamente.

\documentclass{article}

% Command forcing 1st letter of argument to be capital one
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand \firstcap { m } { \tl_mixed_case:n {#1} }
\ExplSyntaxOff

% Loop over latin alphabet (working)
\usepackage{pgffor}
\foreach \x in {a,...,z}{%
\expandafter\xdef\csname \firstcap{\x}mat\endcsname{\noexpand\ensuremath{\noexpand\mathbf{\firstcap{\x}}}}
}
\foreach \x in {a,...,z}{%
\expandafter\xdef\csname \firstcap{\x}vec\endcsname{\noexpand\ensuremath{\noexpand\mathbf{\x}}}
}
% Loop over greek alphabet (non working)
%\foreach \x in {alpha,zeta}{%
%\expandafter\xdef\csname \firstcap{\x}mat\endcsname{\noexpand\ensuremath{\noexpand\mathbf{\firstcap{\x}}}}
%}
%\foreach \x in {\alpha,...,\zeta}{%
%\expandafter\xdef\csname \firstcap{\x}vec\endcsname{\noexpand\ensuremath{\noexpand\mathbf{\x}}}
%}

\begin{document}
$\Amat \Bmat \Cmat \Avec \Bvec \Cvec$
%$\Alphamat \Betamat \Alphavec \Betavec$
\end{document}

Responder1

Você mesmo tem que definir a lista, mas é uma tarefa única. Além disso, definir \Alphamatcomo \bm{\Alpha}não fará nada de sensato, pois \Alphanão está definido.

Acredito que seja mais simples usar diretamente, expl3em vez de ser estranho \foreachcom \csnameamigos \noexpande amigos.

Como sempre, omiti \ensuremathque não adianta nada aqui: \Amaté um comando para um símbolo matemático.

Não tenho certeza de qual é a razão para ter um comando \Avecque imprime um “a” minúsculo em negrito.

\documentclass{article}
\usepackage{amsmath,bm}

% Command forcing 1st letter of argument to be capital one
\usepackage{xparse}

\ExplSyntaxOn

\cs_new_protected:Nn \bamboo_define:nnnnN
 {
  \cs_new_protected:cpx { #1 #3 } { \exp_not:N #4{#5{#2}} }
 }

\int_step_inline:nnn { `A } { `Z }
 {
  \bamboo_define:nnnnN
   { \char_generate:nn { #1 } { 11 } } % character
   { \char_generate:nn { #1 } { 11 } } % character
   { mat }                             % suffix
   { \mathbf }                         % decoration
   \use:n                              % just the argument
 }
\int_step_inline:nnn { `a } { `z }
 {
  \bamboo_define:nnnnN
   { \char_generate:nn { #1 -32 } { 11 } } % character
   { \char_generate:nn { #1 } { 11 } }     % uppercase variant
   { vec }                                 % suffix
   { \mathbf }                             % decoration
   \use:n                                  % just the argument
 }
\clist_map_inline:nn
 {
  Gamma,Delta,Theta,Lambda,Xi,Pi,Sigma,Phi,Psi,Omega
 }
 {
  \bamboo_define:nnnnN
   { #1 }  % the Greek letter name with first uppercase
   { #1 }  % the Greek letter name with first uppercase
   { mat } % suffix
   { \bm } % decoration
   \use:c  % make a control sequence
 }
\clist_map_inline:nn
 {
  alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,
  lambda,mu,nu,xi,pi,rho,sigma,tau,phi,chi,psi,omega
 }
 {
  \bamboo_define:nnnnN
   { \tl_mixed_case:n { #1 } } % the Greek letter name with first uppercase
   { #1 }                      % the Greek letter name
   { vec }                     % suffix
   { \bm }                     % decoration
   \use:c                      % make a control sequence
 }

\ExplSyntaxOff

\begin{document}
$\Amat \Bmat \Cmat \Avec \Bvec \Cvec$
$\Gammamat \Deltamat \Alphavec \Betavec$
\end{document}

insira a descrição da imagem aqui

Considerando tudo isso, acredito que você perdeu mais tempo definindo os loops do que definindo todos os comandos manualmente. ;-)Mas, claro, o interesse acadêmico tem o seu papel.

Responder2

informação relacionada