首先,我先展示一下我的成果。编码似乎太复杂,输出结果也不令人满意。
\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}
请随意编辑。我希望有一个新的包可以针对这个问题开发。