如何创建变量替换语法

如何创建变量替换语法

我在计算中经常使用以下语法来定义变量替换:

\left [ \begin{array}{rcl}
    t &=& \sqrt{x+5}\\
    x &=& t^2 - 5\\
    dx &=& 2tdt\\
\end{array} \right ]

它看起来(几乎!)完全符合我的要求,但每次替换时都会产生很多垃圾。我如何创建新的 Latex 语法,以便我可以改写以下内容,而不是上述内容:

\begin{vars}
    t &=& \sqrt{x+5}\\
    x &=& t^2 - 5\\
    dx &=& 2tdt
\end{vars}

渲染效果会一样吗?如果我能写出类似这样的代码就更好了:

\defvars{t, {\sqrt{x+5}}{x, {t^2 - 5}}{dx, {2tdt}}

答案1

etoolbox这是一个使用's 的想法\docsvlist

\documentclass{article}
\usepackage{amsmath,etoolbox}

\makeatletter
\newcommand*\dovar{}
\def\@dovar#1=#2\q@stop{#1&{}={}&#2\\}
\newrobustcmd*\vars[1]{%
  \renewcommand*\do[1]{\@dovar##1\q@stop}%
  \left[
    \begin{array}{r@{}c@{}l}
      \docsvlist{#1}
    \end{array}
  \right]
}
\makeatother

\begin{document}

\[
  \vars{ t = \sqrt{x+5} , x = t^2 - 5 , dx = 2tdt }
\]

\end{document}

答案2

让我将我的评论转化为答案:

我假设您可以添加包amsmathmathtool。使用它们,您可以将方程数组的输入简化为:

\left[ \begin{aligned}
    t & = \sqrt{x+5}\\
    x & = t^{2} - 5\\
   dx & = 2tdt
\end{aligned}\; \right]

这可以在新命令的定义中使用:

\newcommand*\defvars[6]{\left[ \begin{aligned}
    #1 & = #2   \\
    #3 & = #4   \\
    #5 & = #6
\end{aligned}\; \right]}

然后使用如下示例:

\[
\defvars{t}{\sqrt{x+5}}{x}{t^{2}-5}{dx}{2tdt}
\]

在两种情况下(直接使用代码或用作命令),结果是相同的:

在此处输入图片描述

答案3

您可以使用xparse

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\newcommand{\diff}{\mathop{}\!d}

\ExplSyntaxOn
\NewDocumentCommand{\vars}{m}
 {
  \left[\, % this opens a group
  \tl_clear:N \l_tmpa_tl
  \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
  \seq_map_inline:Nn \l_tmpa_seq
   {
    \bjorn_vars_line:n { ##1 }
   }
  \begin{aligned}
  \tl_use:N \l_tmpa_tl
  \end{aligned}
  \,\right]
 }
\cs_new_protected:Nn \bjorn_vars_line:n
 {
  \seq_set_split:Nnn \l_tmpb_seq { = } { #1 }
  \tl_put_right:Nx \l_tmpa_tl
   {
    \seq_item:Nn \l_tmpb_seq {1}
    &=
    \seq_item:Nn \l_tmpb_seq {2}
    \exp_not:N \\
   }
 }
\ExplSyntaxOff

\begin{document}

$\vars{
  t = \sqrt{x+5} \\
  x = t^2 - 5 \\
  \diff x = 2t\diff t
}$

\end{document}

在此处输入图片描述

相关内容