
현재 제안된 솔루션을 결합하고 있습니다.여기명령의 루프 정의 및여기루프에서 수학적 표기법을 정의하도록 강제하는 대문자의 경우.
목표는 굵은 글꼴과 대문자/소문자로 된 라틴 및 그리스 알파벳의 모든 문자에 대한 단축키를 만드는 것입니다.
라틴 알파벳의 경우 현재 솔루션이 제대로 작동하지만 그리스어의 경우에는 작동하지 않습니다.
실제로 여기에 두 가지 질문이 있습니다.
- 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
패키지unicode-math
수학 모드에서 이를 정의합니다.