pgffor でギリシャ文字をループする

pgffor でギリシャ文字をループする

現在、提案された解決策を組み合わせていますここコマンドのループ定義とここループ内で数学表記を定義するために大文字を強制します。

目標は、太字フォントと大文字/小文字のラテン文字とギリシャ文字のアルファベットのすべての文字のショートカットを作成することです。

現在のソリューションはラテン文字の場合は問題なく機能しますが、ギリシャ文字の場合は機能しません。

実際に、私は2つの質問があります:

  • 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

リストは自分で定義する必要がありますが、これは 1 回限りの作業です。また、\Alphamatとして定義しても、 が定義されていない\bm{\Alpha}ため、意味のあることは何も起こりません\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

関連情報