如何只对对齐方程组的系数进行着色?我正在尝试做这样的事情:
到目前为止,我已经尝试使用这些包并定义这些颜色:
\usepackage{amsmath,systeme}
\usepackage{xcolor}
\definecolor{V}{HTML}{00a2e8}
\definecolor{R}{HTML}{fbc200}
\definecolor{B}{HTML}{000000}
我遇到的问题是,系统环境显然不允许我为系数的减号着色(我猜是用它们来标识方程中的每个项)或等号。所以这就是我尝试过的:
\begin{equation*}\mathcolor{R}{
\systeme[I_{1}I_{2}I_{3}I_{4}]{
6\color{B}{I_{1}}-3\color{B}{I_{2}} -1\color{B}{I_{3}}=\color{V}{5},
-3\color{B}{I_{1}} +7\color{B}{I_{2}} -2\color{B}{I_{4}}=\color{V}{-23},
-1\color{B}{I_{1}}+3\color{B}{I_{3}} -1\color{B}{I_{4}}=\color{V}{5},
-2\color{B}{I_{2}} -1\color{B}{I_{3}} +4\color{B}{I_{4}}=\color{V}{3}
}}
\end{equation*}
另一方面,当我尝试这样做时:
\begin{equation}
\systeme*{
\color{R}{6}\color{B}{I_{1}} -\color{R}{3}\color{B}{I_{2}}-\color{R}{1}\color{B}{I_{3}}=\color{V}{5},
\color{R}-3\color{B}{I_{1}}+\color{R}{7}\color{B}{I_{2}} -\color{R}{2}\color{B}{I_{4}}=\color{V}{-23},
\color{R}{-1}\color{B}{I_{1}}+\color{R}{3}\color{B}{I_{3}}-\color{R}{1}\color{B}{I_{4}}=\color{V}{5},
\color{R}-\color{R}{2}\color{B}{I_{2}}-\color{R}{1}\color{B}{I_{3}} +\color{R}{4}\color{B}{I_{4}}=\color{V}{3}
}
\end{equation}
我得到这个输出:
我知道,从技术上讲,当我写下方程式时,减号不是系数的一部分,而是 + (-k) 的缩写形式,其中 k 是实数。但是,我认为可能有一种方法可以获取我上传的第一张图片的 LaTeX 格式版本。因此,如果您知道这种方法是什么,我将非常感激您 :)
附言:以防有人感到疑惑,这是我从电路中得到的系统,所以变量的名字就是从这里来的。
答案1
这里,我从头开始构建它作为 TABstack。我tokcycle
只使用它的 token 列表构建宏\addcytoks
来构建\cytoks
token 寄存器。
我用来listofitems
解析系数并建立令牌寄存器,最后将其传递给 TABstack。
语法是
\mysystem{<color1>}{<color2>}{<Variable>}{<coefficients>}
妇女权利委员会:
\documentclass{article}
\usepackage{listofitems,tokcycle,xcolor,tabstackengine}
\TABstackMath
\newcommand\mysystem[4]{%
\begingroup
\setsepchar{\\/&}%
\readlist\zlist{#4}%
\foreachitem\z\in\zlist[]{%
\foreachitem\zz\in\zlist[\zcnt]{%
\if\relax\zz\relax\addcytoks{&}\ifnum\zzcnt=1\relax\else
\addcytoks{&&}\fi\else
\ifnum\zzcnt=\listlen\zlist[1]\addcytoks{&{}={}&}\relax\else
\ifnum\zzcnt=1\else\ifnum\zz<0\addcytoks{&&}\else
\addcytoks{&{}+{}&}\fi\fi\fi
\ifnum\zzcnt=\listlen\zlist[1]\relax\addcytoks{\textcolor{#2}\bgroup}%
\else\addcytoks{\textcolor{#1}\bgroup}\fi
\addcytoks[1]{\expandafter{\zz}\egroup}%
\ifnum\zzcnt=\listlen\zlist[1]\relax
\ifnum\zcnt=\listlen\zlist[]\else\addcytoks{\\}\fi\else
\addcytoks{#3_}\addcytoks[1]{\expandafter{\zzcnt}}%
\addcytoks{&}\fi
\fi
}%
}
\renewcommand\stackalignment{r}%
\expandafter\tabbedCenterstack\expandafter{\the\cytoks}
\endgroup
}
\setstackgap{L}{1.2\normalbaselineskip}
\begin{document}
\[
\left\{\mysystem{orange!80!black}{cyan!80!black}{I}
{6&-3&-1&&5\\-3&7&&-2&-23\\-1&&3&-1&5\\&-2&-1&4&3}\right.
\]
\end{document}
如果希望方程式之间的垂直空间不同,可以修改序言中的这一行,
\setstackgap{L}{1.2\normalbaselineskip}
答案2
首先,从你的代码来看,我猜你误解了包的基本命令xcolor
。其最简单的给文本上色的命令是\color
和\textcolor
。
\textcolor
需要二强制参数,第一个是有效颜色,第二个是您希望以该颜色输出的输入。我认为这是您想要使用的方式\color
,但事实并非如此。\color
仅需一强制参数,即已定义的颜色。调用 时\color{R}
,要求 LaTeX 将 后面的所有内容(当前组中的)写入颜色 中R
。
例如当 LaTeX 读取时\color{R}{I_{1}}
,它会切换到颜色R
,然后继续读取{I_{1}}
,这不作为的参数\color
。
另外,我不完全确定它是如何\systeme
工作的,但据我所知,它使用符号和变量来对齐方程组,因此使用颜色命令很可能会弄乱对齐。
因此,我认为我建议您使用其他东西来制作方程组。以下示例使用array
环境。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{xcolor}
\definecolor{V}{HTML}{00a2e8}
\definecolor{R}{HTML}{fbc200}
\definecolor{B}{HTML}{000000}
\newcommand*{\I}[1]{\textcolor{B}{I_{#1}}}
\newcommand*{\p}{\textcolor{B}{+}}
\newenvironment{systemeq}{%
\renewcommand{\arraycolsep}{0pt}
\left\{
\begin{array}{>{\color{R}}r @{\mkern\medmuskip}%
>{\color{R}}c @{\mkern\medmuskip}%
>{\color{R}}r @{\mkern\medmuskip}%
>{\color{R}}c @{\mkern\medmuskip}%
>{\color{R}}r @{\mkern\medmuskip}%
>{\color{R}}c @{\mkern\medmuskip}%
>{\color{R}}r%
@{\mkern\thickmuskip{=}\mkern\thickmuskip}%
>{\color{V}}l}%
}{%
\end{array}
\right.
}
\begin{document}
\[
\begin{systemeq}
6\I{1} & - & 3\I{2} & - & 1\I{3} & & & 5 \\
-3\I{1} & \p & 7\I{2} & & & - & 2\I{4} & -23 \\
-1\I{1} & & & \p & 3\I{3} & - & 1\I{4} & 5 \\
& - & 2\I{2} & - & 1\I{3} & \p & 4\I{4} & 3
\end{systemeq}
\]
\end{document}
这种方法效果很好,但当然它不如通常的\systeme
命令使用方式自动化。