我在计算中经常使用以下语法来定义变量替换:
\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&{}={}\\}
\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
让我将我的评论转化为答案:
我假设您可以添加包amsmath
或mathtool
。使用它们,您可以将方程数组的输入简化为:
\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}