\newcommand 可调整大小

\newcommand 可调整大小

我很快就要对一门常使用张量的课程进行实时笔记。

张量由一个字母(比如 T)以及众多的上标和下标组成。

一般来说,张量看起来像

T^{i_{1},i{2},i{3}}_ {j_{1},j_{2},j_{3}} 

我想知道是否可以创建一个\newcommand有 4 个参数的,

\Tensor{T}{i}{j}{3}

它设置了 Tensor 字母、上标和下标的名称,以及上标和下标的具体数量。我不知道这是否可行。

答案1

是的,使用循环可以实现多种功能。我更喜欢 LaTeX3(实验性内核和宏):

\documentclass{article}
\usepackage{xparse}

\DeclareMathAlphabet{\mathsfsl}{OT1}{cmss}{m}{sl}

\ExplSyntaxOn
% #1 = tensor
% #2 = number of indices
% #3 = upper index
% #4 = number of lower indices (optional)
% #5 = lower index
\NewDocumentCommand{\Tensor}{mmmom}
 {
  \IfNoValueTF { #4 }
   {
    \tens_make:nnnnn { #1 } { #2 } { #3 } { #2 } { #5 }
   }
   {
    \tens_make:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
   }
 }
\cs_new_protected:Npn \tens_make:nnnnn #1 #2 #3 #4 #5
 {
  \tl_clear:N \l__tens_sup_tl
  \tl_clear:N \l__tens_sub_tl
  \tens_create_script:Nnn \l__tens_sup_tl { #2 } { #3 }
  \tens_create_script:Nnn \l__tens_sub_tl { #4 } { #5 }
  \mathsfsl{#1}
  \sp{\l__tens_sup_tl}
  \sb{\l__tens_sub_tl}
 }
\cs_new_protected:Npn \tens_create_script:Nnn #1 #2 #3
 {
  \int_step_inline:nnnn { 1 } { 1 } { #2 }
   {
    \int_compare:nTF { ##1 == 1 }
     {
      \tl_put_right:Nn #1 { #3 \sb {##1} }
     }
     {
      \tl_put_right:Nn #1 { , #3 \sb {##1} }
     }
   }
 }

\tl_new:N \l__tens_sup_tl
\tl_new:N \l__tens_sub_tl

\ExplSyntaxOff

\begin{document}

$\Tensor{T}{3}{i}{j}$

$\Tensor{T}{3}{i}[5]{j}$

$\Tensor{T}{2}{i}[0]{j}$

\end{document}

通过改变语法,我们可以适应不同数量的上标和下标:如果下标变量名前没有可选参数,则数量将与上标变量的数量相同。您甚至可以让一个(或两个)等于零。

在此处输入图片描述

相关内容