答案1
您想要定义一个具有六个参数的宏:这六个参数在宏代码中用#1
、...表示。由于始终处于数学模式,因此无需在其中使用美元符号。因此您可以执行以下操作:#6
vmatrix
$
\documentclass{article}
\usepackage{amsmath} % for vmatrix
\newcommand{\xmatrix}[6]{%
\begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k} \\
#1 & #2 & #3\\
#4 & #5 & #6
\end{vmatrix}}
\begin{document}
\[
\xmatrix{u1}{u2}{u3}{v1}{v2}{v3}
\]
\end{document}
但是,我发现一个接受六个参数的宏有点不愉快,而且容易出错。我建议使用另一种定义二参数,每个参数都是一个逗号分隔的列表。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand*{\xmatrix}[2]{{%
\def\@xmatrix##1,##2,##3,##4\relax{##1 & ##2 & ##3}%
\begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k} \\
\@xmatrix#1,,,\relax\\
\@xmatrix#2,,,\relax
\end{vmatrix}%
}}
\makeatother
\begin{document}
\[
\xmatrix{u1,u2,u3}{v1,v2,v3}
\quad
\xmatrix{u1}{,v2,v3} % just as example
\]
\end{document}
答案2
你可以做得比定义一个有六个参数的宏好得多。我建议只使用两个参数,将向量的系数表示为逗号分隔的列表。
我们还可以定义一个变体计算叉积。
\documentclass{article}
\usepackage{amsmath,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\crossproduct}{s m m}
{% #1 = optional *
% #2 = first vector as comma list
% #3 = second vector as comma list
\IfBooleanTF{#1}
{% *-variant, compute the product
\msun_crossproduct_compute:nn { #2 } { #3 }
}
{% normal, typeset in determinant form
\msun_crossproduct_symbolic:nn { #2 } { #3 }
}
}
\fp_new:N \l_msun_crossproduct_i_fp
\fp_new:N \l_msun_crossproduct_j_fp
\fp_new:N \l_msun_crossproduct_k_fp
\cs_new_protected:Nn \msun_crossproduct_compute:nn
{
\fp_set:Nn \l_msun_crossproduct_i_fp
{
\clist_item:nn { #1 } { 2 } * \clist_item:nn { #2 } { 3 }
-
\clist_item:nn { #1 } { 3 } * \clist_item:nn { #2 } { 2 }
}
\fp_set:Nn \l_msun_crossproduct_j_fp
{
\clist_item:nn { #1 } { 3 } * \clist_item:nn { #2 } { 1 }
-
\clist_item:nn { #1 } { 1 } * \clist_item:nn { #2 } { 3 }
}
\fp_set:Nn \l_msun_crossproduct_k_fp
{
\clist_item:nn { #1 } { 1 } * \clist_item:nn { #2 } { 2 }
-
\clist_item:nn { #1 } { 2 } * \clist_item:nn { #2 } { 1 }
}
\fp_use:N \l_msun_crossproduct_i_fp \mathbf{i}
\fp_compare:nF { \l_msun_crossproduct_j_fp < \c_zero_fp } { + }
\fp_use:N \l_msun_crossproduct_j_fp \mathbf{j}
\fp_compare:nF { \l_msun_crossproduct_k_fp < \c_zero_fp } { + }
\fp_use:N \l_msun_crossproduct_k_fp \mathbf{k}
}
\cs_new_protected:Nn \msun_crossproduct_symbolic:nn
{
\begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k}
\\
\clist_item:nn { #1 } { 1 } & \clist_item:nn { #1 } { 2 } & \clist_item:nn { #1 } { 3 }
\\
\clist_item:nn { #2 } { 1 } & \clist_item:nn { #2 } { 2 } & \clist_item:nn { #2 } { 3 }
\end{vmatrix}
}
\ExplSyntaxOff
\begin{document}
\[
\crossproduct{0,1,-2}{3,0,-4}=
\crossproduct*{0,1,-2}{3,0,-4}
\]
\end{document}