每次输入 6 个值时如何使用 \newcommand 打印一个矩阵?

每次输入 6 个值时如何使用 \newcommand 打印一个矩阵?

我对 LaTeX 还比较陌生,而且我根本不知道如何使用这个\newcommand功能(对 stackexchange 也是新手)。我一直在尝试找出如何打印类似这样的内容 叉积矩阵

我尝试了各种方法,到目前为止错误最少的代码是这样的:

\newcommand{\xmatrix}[6]{
\begin{vmatrix}
    $i & j & k$\\
    {u1} & {u2} & {u3}\\
    {v1} & {v2} & {v3}
\end{vmatrix}}

我很确定我只是用\newcommand错了部分,但我希望能够在第一行以粗体打印单位向量,然后输入接下来的 6 个数字。感谢您的任何建议!

答案1

您想要定义一个具有六个参数的宏:这六个参数在宏代码中用#1、...表示。由于始终处于数学模式,因此无需在其中使用美元符号。因此您可以执行以下操作:#6vmatrix$

\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}

在此处输入图片描述

相关内容