我经常需要在数学模式下写这样的表达式:
L_t^pL_x^q
出于某种原因,我并不总是满足于输入这些,我想定义一些具有相同输出的新命令。我在想是否可以定义一个具有相同输出的命令,其代码如下所示:
\LL_t_x^p^q
我已经发现这个帖子关于张量,这看起来相当相关(参见第一个答案)。“tensor”包中使用的语法相当不错,但我不知道如何使用该语法复制命令。
我的问题如下:
尽管“tensor”包中的语法非常好,但在我的梦想中,我希望能够在上面写的命令中使用完全相同的语法: 。那么,有没有办法设计一个像上面一样工作的命令(即,具有与 相同的输出
\LL_x_t^p^q
形式的命令)?\LL_t_x^p^q
L_t^pL_x^q
如果没有,我该如何设计一个与“tensor”包语法相同的命令?也就是说(如果我理解正确的话),一个具有 3 类输入的通用命令,
\arg
语法如下:\superscriptI,\superscriptII,...
\subscriptI,\subscriptII,...
\commandname{\arg}{^\superscriptI_\subscriptI_\subscriptII^\superscriptII...}
(就我而言,我想编写一个形式为 的命令\LL{_x_t^p^q}
,其输出与 相同L_t^pL_x^q
)。
答案1
答案2
用例显示了输入语法中的一些可能变化,所有这些变化都会产生所需的输出。例如,\LL_x_t^p^q$
、$\LL_x^p_t^q$
和$\LL^p_x_t^q$
都产生相同的输出。
编辑以允许包含下标或上标,例如形式\LL_{x_a}_t^p^q
。
\documentclass{article}
\newcommand\LL{
\toks0{}\toks2{}
\def\subbase{0}
\def\supbase{0}
\LLdigest
}
\newcommand\LLdigest[2]{
\ifx_#1
\toks\subbase\expandafter{\the\toks\subbase#1{#2}}
\def\subbase{2}
\def\next{\LLdigest}
\else
\ifx^#1
\toks\supbase\expandafter{\the\toks\supbase#1{#2}}
\def\supbase{2}
\def\next{\LLdigest}
\else
L\the\toks0L\the\toks2
\def\next{#1#2}
\fi
\fi
\next
}
\begin{document}
$\LL_x_t^p^q$
$\LL_x^p_t^q$
\end{document}
答案3
我可以提出一个稍微不同的语法。
\documentclass{article}
\usepackage{amsmath}
\NewDocumentCommand{\LL}{e{_^}}{%
\LLaux{#1}{#2}%
}
\NewDocumentCommand{\LLaux}{%
>{\SplitArgument{1}{,}}m
>{\SplitArgument{1}{,}}m
}{%
\LLauxa#1#2%
}
\NewDocumentCommand{\LLauxa}{mmmm}{%
L_{#1\vphantom{#2}}^{#3\vphantom{#4}}
L_{#2\vphantom{#1}}^{#4\vphantom{#3}}
}
\begin{document}
$\LL_{t,x}^{p,q}$
\end{document}
然而,如果全部你的实例\LL
有形式
\LL_t_x^p^q
也就是说,每次调用都有两个下标和两个上标,解决方案更直接:
\newcommand{\LL}{} % for safety
\def\LL_#1_#2^#3^#4{%
L_{#1\vphantom{#2}}^{#3\vphantom{#4}}%
L_{#2\vphantom{#1}}^{#4\vphantom{#3}}%
}