我很快就要对一门常使用张量的课程进行实时笔记。
张量由一个字母(比如 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}
通过改变语法,我们可以适应不同数量的上标和下标:如果下标变量名前没有可选参数,则数量将与上标变量的数量相同。您甚至可以让一个(或两个)等于零。