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

목록을 직접 정의해야 하지만 이는 일회성 작업입니다. 게다가, 정의 되지 않은 \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

관련 정보