Цикл по греческим буквам с помощью pgffor

Цикл по греческим буквам с помощью pgffor

В настоящее время я объединяю предложенные решенияздесьдля определения цикла команд издесьдля заглавной буквы, заставляющей определять математические обозначения в цикле.

Цель — создать сочетание клавиш для всех букв латинского и греческого алфавитов, выделенных жирным шрифтом и в верхнем/нижнем регистре.

Для латинского алфавита текущее решение работает нормально, но для греческого оно не сработает.

Итак, у меня на самом деле два вопроса:

  • 1: Возможно ли автоматически перебирать греческие буквы с помощью pgffor, как и латинские буквы?
  • 2: Есть ли причина, по которой мое текущее решение не работает с греческими буквами?

Как обычно, ответ может быть очень коротким или очень длинным, поэтому заранее спасибо.

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

решение1

Список нужно определить самому, но это одноразовая работа. Кроме того, определение \Alphamatas \bm{\Alpha}не даст ничего разумного, as \Alphaне определено.

Я считаю, что проще использовать его напрямую, expl3а не неудобно \foreachс \csname, \noexpandи друзьями.

Как обычно, я опустил \ensuremathэто, это не имеет никакого смысла: \Amatэто команда для математического символа.

Я не совсем понимаю, в чем смысл команды \Avec, которая печатает строчную букву «a» жирным шрифтом.

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

введите описание изображения здесь

Учитывая все вышесказанное, я считаю, что вы потеряли больше времени на определении циклов, чем на определении всех команд вручную. ;-)Но, конечно, академический интерес играет свою роль.

решение2

Связанный контент