获得显示消元法解决联立方程的图表的最优雅方法是什么?

获得显示消元法解决联立方程的图表的最优雅方法是什么?

首先,我先展示一下我的成果。编码似乎太复杂,输出结果也不令人满意。

\documentclass[border=12pt,12pt,varwidth]{standalone}
\usepackage{mathtools}

\begin{document}
$
    \begin{aligned}
        \!
        \begin{aligned}
            3x +2y &=7 \\
            9x +8y &=22 
        \end{aligned}
        \left|
        \!
        \begin{aligned}
            \times 3\\
            \times 1
        \end{aligned}
        \right|
        &\!
        \begin{aligned}
            9x +6y &=21 \\
            9x +8y &=22 
        \end{aligned}\\
        &\!
        \begin{aligned}
            -2y &=-1 \\
                y &=1/2 
        \end{aligned}
    \end{aligned}
$
\end{document}

在此处输入图片描述

我想要实现的是

  • 编码必须使用尽可能少的击键次数。
  • 输出应如下所示,

    在此处输入图片描述

    其中所有空间都很平衡,所有等号都对齐,水平线存在以显示减法或加法的过程,过程的符号可以更改为正或负,并且垂直线足够高以分隔左右等式(没有多余的垂直线)。

如何以最优雅的方式获取这样的图表?

答案1

基本array实现:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}

\begin{document}
\[
  \begin{array}{r@{}l@{\quad}l@{\quad}r@{}l@{}c}
    3x + 2y & {}= 7  & \xrightarrow{\times 3} & 9x + 6y & {}= 21  \\[\jot]
    9x + 8y & {}= 22 & \xrightarrow{\phantom{\times 3}} & 9x + 8y & {}= 22 & ~\smash{\raisebox{.8\normalbaselineskip}{$+$}} \\
    \cline{4-5}
            &        &           &    - 2y & {}= -1  \\[\jot]
            &        &           &       y & {}= 1/2 \\
  \end{array}
\]
\end{document}

可以使用 或 中的规则长度来减少右侧的悬垂。为此,也许可以使用\rlap{$-1$}\rlap{1/2}

答案2

从问题中可以看出,LaTeX 不是必需的,但“编码必须使用尽可能少的击键次数”。因此,我建议使用以下解决方案,尽量减少外部资源,并且不使用 LaTeX:

\输入 opmac

\def\gem{%
   \def\tabiteml{$\enspace}\def\tabitemr{\enspace$}
   \adef={\kern-1em&{}=}
   \def\0{\phantom0}
   \def\grule##1{\multispan3&\multispan2\hrulefill
      \tmpdim=-.2pt \advance\tmpdim by\fontdimen22\textfont2
      \lower\tmpdim\rlap{ \ $##1$\phantom+}\cr}
   \def\result{&\omit&\omit&}
   \table{rl|c|rl}
}    
$$   
\宝石{
  3x + 2y = \07 & \times3 & 9x + 6y = 21 \cr
  9x + 8y = 22 & \times1 & 9x + 8y = 22 \cr
  \grule -
  \result -2y = -1 \cr
  结果 y = 1/2
}
$$
\结尾

现在,您可以运行命令 pdftex document。


5 月 17 日:我重写了解决方案,不使用 opmac,只使用基本的 TeX 命令。因此宏代码更加神秘,但用户可以使用与上面完全相同的宏 \gem。它也可以在 LaTeX 中使用。

\def\gem{%
   \lccode`\~=`\= \lowercase{\def~}{&{}=}
   \catcode`\==13
   \def\0{\phantom0}
   \def\grule##1{\multispan3&\multispan2\hrulefill
      \dimen0=-.2pt \advance\dimen0 by\fontdimen22\textfont2
      \lower\dimen0\rlap{ \ $##1$\phantom+}\cr}
   \def\result{&\omit&\omit&}
   \def\myhalign##1##2{\vcenter{\halign{##1\cr##2\crcr}}}%
   \myhalign{\hfil$##$&$##$\hfil\quad\strut\vrule&\quad\hfil$##$\hfil\quad\vrule
            &\quad\hfil$##$&$##$\hfil}
}
$$
\gem{
  3x + 2y = \07  & \times3 & 9x + 6y = 21 \cr
  9x + 8y = 22   & \times1 & 9x + 8y = 22 \cr
  \grule -
  \result -2y = -1 \cr
  \result y = 1/2
}
$$

请注意, \gem 宏需要这里提到的所有解决方案中最少的击键次数,并且它输出确切地问题给出的结果。

答案3

在这里,我使用tabstackengine功能来构建一些有用的宏,这些宏将允许你实现所需的紧凑语法。当然,可以通过将诸如 之类的快捷方式\let设置为 等来进一步减少击键次数。\alignLongunderstack\aLus

请注意,如果其中一个\times乘数需要两位或更多位数字,则根据我的审美解释,该特定堆栈将左对齐,但可以使用\Longunderstack定义中的可选参数 on 来更改对齐方式\multsimeq

已修改,以处理 OP 评论的新增案例。

\documentclass{article}
\usepackage{tabstackengine,scalerel}
\stackMath
\newcommand\solveop[1]{\smash{\protect\raisebox{-.4\baselineskip-2.5pt}{${}#1{}$}}}
\newcommand\multsimeq[2]{%
  \,\,\stretchleftright{\vert}{\,\Longunderstack[l]{\times #1\\ \times #2}\,}{\vert}}
\def\xlu#1{%
  \setbox0=\hbox{$#1{}$}\setbox1=\hbox{$\,\,$}%
  \stackunder[.4\baselineskip]{#1{}}{\protect\rule{\wd0+\wd1}{.5pt}}%
}
\setstackgap{L}{1.2\baselineskip}\def\stacktype{L}
\setstacktabulargap{0pt}
\begin{document}
\[
  \alignLongunderstack{
    3x + 2y =& 7\\
    9x + 8y =& 22
  }
  \multsimeq{3}{1}
  \alignLongunderstack{
         9x + 6y = & 21\\
    \xlu{9x + 8y =}& \xlu{22}\solveop{-}\\
              -2y= & -1\\
               y = & 1/2
  }%
\]
\[
  \TABbinary
  \tabularLongunderstack{lcr}{
    2x - 5y &=& 2\\
    10x  &=& 5
  }
  \multsimeq{5}{1}
  \tabularLongunderstack{lrcl}{
         10x&\!\!{}-{}25y&=&10\\
    \xlu{10x}&\xlu{\,~~~~~~} &\xlu{\,=}& \xlu{~\,5}\solveop{-}\\
              &{-}25y&=&5\\
              & y&=& -1/5
  }
\]
\end{document}

在此处输入图片描述

在此 MWE 中,数学环境的使用\[...\]是可选的,因为解决方案仅由堆栈和拉伸组成。该\stackMath指令将强制所有堆叠命令在数学模式下处理其参数。同样,scalerel宏默认在数学中处理参数。

答案4

它主要基于 Werner 的回答、Mico 的回答和 Herbert 的回答,这些回答散布在这个网站上。我在这里展示最终的代码只是为了分享。因此,wiki 附在这个答案上,这样我就不会收到任何回复。

\documentclass[preview,border=12pt,12pt]{standalone}
\usepackage{mathtools,booktabs,array}

\newcolumntype\specifier{%
        r@{}r@{}l
        @{\quad}c@{\quad}
        r@{}r@{}l
        @{}c}

\newcommand\act[1]{\xrightarrow{\quad\mathclap{\times #1}\quad}}
\newcommand\ope[1]{~\smash{\raisebox{.8\normalbaselineskip}{$#1$}}}
\newcommand\equ[3]{{}#1 & {}#2 & {}=#3}

\begin{document}
$
    \begin{array}{\specifier}
     \equ{3x}{+3y}{7} & \act{1} & \equ{3x}{+3y}{7}            \\[\jot]
     \equ{3x}{}{22}   & \act{3} & \equ{3x}{}{66}   & \ope{-}  \\\cmidrule{5-7}
         &&           &         & \equ{}{{{-3y}}}{59}         \\[\jot]
         &&           &         & \equ{}{y}{-59/3}            
    \end{array}
$
\end{document}

在此处输入图片描述

请随意编辑。我希望有一个新的包可以针对这个问题开发。

相关内容