Como colorir apenas os coeficientes de um sistema de equações?

Como colorir apenas os coeficientes de um sistema de equações?

Como colorir apenas os coeficientes de um sistema de equações alinhado? Estou tentando fazer algo assim:

insira a descrição da imagem aqui

E até agora tentei usar esses pacotes e definir essas cores:

\usepackage{amsmath,systeme}
\usepackage{xcolor}
\definecolor{V}{HTML}{00a2e8}
\definecolor{R}{HTML}{fbc200}
\definecolor{B}{HTML}{000000}

O problema que tenho é que aparentemente o ambiente do sistema não me permite colorir o sinal negativo dos coeficientes (acho que é usá-los para identificar todos os termos nas equações) nem o símbolo de igual. Então é isso que eu tentei:

\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*}

Aqui, o problema com essa abordagem é que o delimitador e o símbolo de igual são amarelos e quando tento colori-los de preto, recebo uma mensagem de erro que diz: "! L'indice n'est pas un nombre entier!."

Por outro lado, quando tento isso:

    \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}

Eu recebo esta saída:

E o problema aqui é que não consigo colorir os sinais de menos, aparentemente pela mesma razão que não consigo colorir os símbolos de igualdade na abordagem anterior.

Eu sei que tecnicamente, os sinais de menos, conforme escrevi as equações, não fazem parte dos coeficientes, mas sim uma forma abreviada de dizer + (-k) onde k é um número real. Mas pensei que poderia haver uma maneira de obter a versão formatada em LaTeX da primeira imagem que carreguei. Portanto, se você tem alguma ideia do que é esse caminho, ficarei muito grato a você :)

PS: Caso alguém esteja se perguntando, esse é o sistema que obtenho de um circuito elétrico, então é daí que vem o nome das variáveis.

Responder1

Aqui, eu o construo do zero como um TABstack. Eu uso tokcycleapenas na medida em que emprega a macro de construção de lista de tokens \addcytokspara construir o \cytoksregistro de token.

Eu uso listofitemspara analisar os coeficientes e construir o registro do token, que no final é passado para o TABstack.

Sintaxe é

\mysystem{<color1>}{<color2>}{<Variable>}{<coefficients>}

O MWE:

\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}

insira a descrição da imagem aqui

Se for desejado um espaço vertical diferente entre as equações, pode-se alterar esta linha no preâmbulo,

\setstackgap{L}{1.2\normalbaselineskip}

Responder2

Primeiro, acho que pelo seu código você entendeu mal os comandos básicos do xcolorpacote. Seus comandos mais simples que colorem um texto são \colore \textcolor.

  • \textcolorlevadoisargumentos obrigatórios, sendo o primeiro uma cor válida e o segundo sendo a entrada que você deseja que seja gerada nessa cor. Acho que é assim que você pretendia usar \color, mas não é assim que funciona.

  • \colorleva apenasumargumento obrigatório que é uma cor definida. Ao ligar \color{R}, você pede ao LaTeX para escrever tudo (no grupo atual) que segue na cor R.

Assim, por exemplo, quando o LaTeX lê \color{R}{I_{1}}, ele muda para a cor Re então a leitura continua de {I_{1}}, o que não é considerado um argumento de \color.

Além disso, não tenho certeza de como \systemefunciona, mas até onde eu sei, ele alinha o sistema de equações usando os sinais e as variáveis, então parece provável que o uso de comandos de cores atrapalhe o alinhamento.

Portanto, acho que recomendo que você use outra coisa para fazer o sistema de equações. O exemplo a seguir usa um arrayambiente.

\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}

Essa abordagem funciona bem, mas é obviamente menos automática do que o uso normal do \systemecomando.

informação relacionada