Schleife über griechische Buchstaben mit pgffor

Schleife über griechische Buchstaben mit pgffor

Ich kombiniere derzeit vorgeschlagene LösungenHierfür die Schleifendefinition von Befehlen undHierfür die Großbuchstaben-Forcierung, um mathematische Notationen in einer Schleife zu definieren.

Das Ziel besteht darin, eine Tastenkombination für alle Buchstaben des lateinischen und griechischen Alphabets in Fettschrift und Groß-/Kleinschreibung zu haben.

Für das lateinische Alphabet funktioniert die aktuelle Lösung einwandfrei, für das griechische Alphabet jedoch nicht.

Ich habe hier eigentlich zwei Fragen:

  • 1: Ist es möglich, mit pgffor automatisch eine Schleife über griechische Buchstaben zu erstellen, genau wie bei lateinischen Buchstaben?
  • 2: Gibt es einen Grund, warum meine aktuelle Lösung nicht mit griechischen Buchstaben funktioniert?

Wie immer kann die Antwort sehr kurz oder sehr lang ausfallen, also vielen Dank im Voraus.

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

Antwort1

Sie müssen die Liste selbst definieren, aber das ist eine einmalige Aufgabe. Außerdem bewirkt die Definition von \Alphamatas \bm{\Alpha}nichts Sinnvolles, da as \Alphanicht definiert ist.

Ich glaube, es ist einfacher, es direkt zu verwenden, expl3als umständlich \foreachmit \csnameund \noexpandFreunden.

Wie üblich habe ich „das“ weggelassen, \ensuremathdas bringt hier nichts: \Amatist ein Befehl für ein mathematisches Symbol.

Ich bin nicht sicher, was der Grund dafür ist, einen Befehl zu haben \Avec, der ein kleines „a“ fett druckt.

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

Bildbeschreibung hier eingeben

Alles in allem glaube ich, dass Sie mit der Definition der Schleifen mehr Zeit verloren haben als mit der manuellen Definition aller Befehle. ;-)Aber natürlich spielt das akademische Interesse auch eine Rolle.

Antwort2

verwandte Informationen