\newcommand를 사용하는 가변 차원의 벡터?

\newcommand를 사용하는 가변 차원의 벡터?
\usepackage{amsmath}
\usepackage{bm}

\newcommand{\uvec}[1]{\bm{\hat{#1}}}  % Bold hatted unit vectors
\newcommand{\BasisChar}{\uvec e}
\newcommand{\Element}[2]{#1_{#2}{\BasisChar}_{#2}}  % \Element{a}{5} yields a_5\uvec e_5

% Nonesense attempt..
\newcommand{\Vector}[2]{  
  \OutieVec = \Element{#1}{0}
  \for(n = 1; #2; n++)
  \OutieVec += \Element{#1}{n} 
  \next
  \the\outievec
                       }

\begin{document}
  \Vector{a}{3} 'results in a_0\uvec e_0 + a_1\uvec e_1 + a_2\uvec e_2 + a_3\uvec e_3 
  
  \Vector{x}{2} 'results in x_0\uvec e_0 + x_1\uvec e_1 + x_2\uvec e_2
  
  \renewcommand{\BasisChar}{\uvec i}
  \vector{b}{4} 
  'results in b_0\uvec i_0 + b_1\uvec i_1 + b_2\uvec i_2 + b_3\uvec i_3 + b_4\uvec i_4 

\end{document}```

답변1

expl3에서 인프라를 이미 사용할 수 있으므로 으로 주기를 수행하는 것은 어렵지 않습니다 \int_step_inline:nn.

\documentclass{article}
\usepackage{amsmath,bm}

\newcommand{\uvec}[1]{\bm{\hat{#1}}}
\newcommand{\BasisChar}{\uvec{e}}

\ExplSyntaxOn

\NewDocumentCommand{\Vector}{smm}
 {
  \IfBooleanTF { #1 }
   {% with ellipsis
    \scotparker_vector_ellipsis:nn { #2 } { #3 }
   }
   {% fully written down
    \scotparker_vector_full:nn { #2 } { #3 }
   }
 }

\cs_new_protected:Nn \scotparker_vector_full:nn
 {
  #1\sb{0} \BasisChar\sb{0}
  \int_step_inline:nn { #2 }
   {
    + #1\sb{##1} \BasisChar\sb{##1}
   }
 }

\cs_new_protected:Nn \scotparker_vector_ellipsis:nn
 {
  #1\sb{0} \BasisChar\sb{0} +
  #1\sb{1} \BasisChar\sb{1} +
  \dots +
  #1\sb{#2} \BasisChar\sb{#2}
 }

\ExplSyntaxOff

\begin{document}

$\Vector*{c}{n}$

$\Vector{a}{3}$
  
$\Vector{x}{2}$
  
\renewcommand{\BasisChar}{\uvec{\imath}}

$\Vector{b}{4}$

\end{document}

쉽기 때문에 "기호" 선형 조합 버전도 추가했습니다.

여기에 이미지 설명을 입력하세요

농담 메모.중괄호 생략을 좋아하는 것 같으니 시도해 보세요 $A_\notin$.

농담이 아닙니다.물론 이는 "표준" 방법을 사용하여 달성할 수 있습니다("전체" 버전만 표시합니다).

\makeatletter
\newcommand{\Vector}[2]{%
  #1_{0} \BasisChar_{0}%
  \begingroup\count@=0
  \loop\ifnum#2>\count@
  \advance\count@ by 1
    +#1_{\the\count@} \BasisChar_{\the\count@}%
  \repeat
  \endgroup
}
\makeatother

가장 읽기 쉬운 것을 선택하세요.

관련 정보