
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 \Alphamat
como \bm{\Alpha}
não fará nada de sensato, pois \Alpha
não está definido.
Acredito que seja mais simples usar diretamente, expl3
em vez de ser estranho \foreach
com \csname
amigos \noexpand
e amigos.
Como sempre, omiti \ensuremath
que 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 \Avec
que 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}
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
O unicode-math
pacotedefine-os para você, no modo matemático.