이 인쇄 번호 코드를 다른 색상으로 업데이트하려면 어떻게 해야 합니까?

이 인쇄 번호 코드를 다른 색상으로 업데이트하려면 어떻게 해야 합니까?

대각선, 첫 번째 행 및 첫 번째 열을 다른 색상으로 강조 표시하는 코드가 있습니다! (이 코드는 이 커뮤니티의 egreg에서 빌드되었습니다. :-D의 과거 질문)

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{xparse,environ}

\ExplSyntaxOn
\NewEnviron{matlabtabular}[1]
 {
  \tl_set:Nx \l_angelino_matlab_preamble_tl 
   {
    \tl_tail:n { #1 }
   }
  \tl_put_left:Nn \l_angelino_matlab_preamble_tl { | >{\columncolor{red!20}} }
  \angelino_matlabtab:VV \l_angelino_matlab_preamble_tl \BODY
 }

\cs_new_protected:Nn \angelino_matlabtab:nn
 {
  \seq_set_split:Nnn \l_angelino_matlabtab_rows_seq { \hline } { #2 }
  % the first item is empty
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % the last item is empty
  \seq_pop_right:NN \l_angelino_matlabtab_rows_seq \l_tmpa_tl
  % separate the first row
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % fix the first row
  \tl_put_left:Nn \l_angelino_matlabtab_body_tl { \hline\rowcolor{blue!20} }
  \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
  \seq_map_inline:Nn \l_angelino_matlabtab_rows_seq
   {
    \int_incr:N \l_angelino_matlab_currentrow_int
    \int_zero:N \l_angelino_matlab_currentcol_int
    \seq_set_split:Nnn \l_angelino_matlabtab_row_seq { & } { ##1 }
    \seq_pop_left:NN \l_angelino_matlabtab_row_seq \l_angelino_matlabtab_first_tl
    \tl_put_right:NV \l_angelino_matlabtab_body_tl \l_angelino_matlabtab_first_tl
    \seq_map_inline:Nn \l_angelino_matlabtab_row_seq
     {
      \int_incr:N \l_angelino_matlab_currentcol_int
      \int_compare:nTF { \l_angelino_matlab_currentcol_int == \l_angelino_matlab_currentrow_int }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & \cellcolor{green} ####1 }
       }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & ####1 }
       }
     }
    \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
   }
  \begin{tabular}{#1}
  \l_angelino_matlabtab_body_tl
  \end{tabular}
 }
\cs_generate_variant:Nn \angelino_matlabtab:nn { VV }
\int_new:N \l_angelino_matlab_currentcol_int
\int_new:N \l_angelino_matlab_currentrow_int
\seq_new:N \l_angelino_matlabtab_rows_seq
\seq_new:N \l_angelino_matlabtab_row_seq
\tl_new:N \l_angelino_matlabtab_body_tl
\tl_new:N \l_angelino_matlabtab_first_tl
\tl_new:N \l_angelino_matlab_preamble_tl
\ExplSyntaxOff

\begin{document}

\begin{matlabtabular}{|l|c|c|c|}
\hline
&\textbf{ciao}&\textbf{ciao2}&\textbf{ciao3}\\\hline
\textbf{ciao}&5.3&0.913&0.278\\\hline
\textbf{ciao2}&-30&0.632&0.547\\\hline
\textbf{ciao3}&20&-60&0.958\\\hline
\end{matlabtabular}

\end{document}

숫자가 대각선에 있지 않은 경우 >0이면 숫자가 파란색으로 인쇄되고 숫자가 <0이면 숫자가 빨간색으로 인쇄되도록 이 코드를 어떻게 개선할 수 있습니까?????

답변1

가능한 해결책은 다음과 같습니다.

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{xparse,environ}

\ExplSyntaxOn
\NewEnviron{matlabtabular}[1]
 {
  \tl_set:Nx \l_angelino_matlab_preamble_tl 
   {
    \tl_tail:n { #1 }
   }
  \tl_put_left:Nn \l_angelino_matlab_preamble_tl { | >{\columncolor{red!20}} }
  \angelino_matlabtab:VV \l_angelino_matlab_preamble_tl \BODY
 }

\cs_new_protected:Nn \angelino_matlabtab:nn
 {
  \seq_set_split:Nnn \l_angelino_matlabtab_rows_seq { \hline } { #2 }
  % the first item is empty
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % the last item is empty
  \seq_pop_right:NN \l_angelino_matlabtab_rows_seq \l_tmpa_tl
  % separate the first row
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % fix the first row
  \tl_put_left:Nn \l_angelino_matlabtab_body_tl { \hline\rowcolor{blue!20} }
  \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
  \seq_map_inline:Nn \l_angelino_matlabtab_rows_seq
   {
    \int_incr:N \l_angelino_matlab_currentrow_int
    \int_zero:N \l_angelino_matlab_currentcol_int
    \seq_set_split:Nnn \l_angelino_matlabtab_row_seq { & } { ##1 }
    \seq_pop_left:NN \l_angelino_matlabtab_row_seq \l_angelino_matlabtab_first_tl
    \tl_put_right:NV \l_angelino_matlabtab_body_tl \l_angelino_matlabtab_first_tl
    \seq_map_inline:Nn \l_angelino_matlabtab_row_seq
     {
      \int_incr:N \l_angelino_matlab_currentcol_int
      \int_compare:nTF { \l_angelino_matlab_currentcol_int == \l_angelino_matlab_currentrow_int }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & \cellcolor{green} ####1 }
       }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & \angelino_print_number:n { ####1 } }
       }
     }
    \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
   }
  \begin{tabular}{#1}
  \l_angelino_matlabtab_body_tl
  \end{tabular}
 }
\cs_generate_variant:Nn \angelino_matlabtab:nn { VV }

\cs_new_protected:Nn \angelino_print_number:n
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \tl_if_in:NnTF \l_tmpa_tl { \\ }
   {
    \tl_replace_once:Nnn \l_tmpa_tl { \\ } { }
    \__angelino_print_number:V \l_tmpa_tl
    \\
   }
   {
    \__angelino_print_number:V \l_tmpa_tl
   }
 }
\cs_new_protected:Nn \__angelino_print_number:n
 {
  \fp_compare:nTF { #1 > 0 }
   {
    \textcolor{blue}{$#1$}
   }
   {
    \textcolor{red}{$#1$}
   }
 }
\cs_generate_variant:Nn \__angelino_print_number:n { V }
\int_new:N \l_angelino_matlab_currentcol_int
\int_new:N \l_angelino_matlab_currentrow_int
\seq_new:N \l_angelino_matlabtab_rows_seq
\seq_new:N \l_angelino_matlabtab_row_seq
\tl_new:N \l_angelino_matlabtab_body_tl
\tl_new:N \l_angelino_matlabtab_first_tl
\tl_new:N \l_angelino_matlab_preamble_tl
\ExplSyntaxOff

\begin{document}

\begin{matlabtabular}{|l|c|c|c|}
\hline
&\textbf{ciao}&\textbf{ciao2}&\textbf{ciao3}\\\hline
\textbf{ciao}&0.815&0.913&0.278\\\hline
\textbf{ciao2}&-0.906&0.632&0.547\\\hline
\textbf{ciao3}&-0.127&0.098&0.958\\\hline
\end{matlabtabular}

\end{document}

여기에 이미지 설명을 입력하세요


추가 작업을 통해 색상 사용자 정의를 추가할 수 있습니다. 새로운 선택적 인수에서 \begin{matlabtabular}색상을 지정할 수 있습니다.

헤더 범례 진단 긍정적 부정적

<key>=<color>각각은 아래 예와 같은 형식이어야 합니다 . 기본값은

header=blue!20,
legend=red!20,
diag=green,
positive=., % normalcolor
negative=., % normalcolor

당신이 준 첫 번째 사양처럼.

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{xparse,environ}

\ExplSyntaxOn
\NewEnviron{matlabtabular}[2][]
 {
  \keys_set:nn { angelino/matlabtab } { #1 }
  \tl_set:Nx \l_angelino_matlabtab_preamble_tl 
   {
    \tl_tail:n { #2 }
   }
  \tl_put_left:Nn \l_angelino_matlabtab_preamble_tl { | >{\columncolor{\l_angelino_matlabtab_legend_tl}} }
  \angelino_matlabtab:VV \l_angelino_matlabtab_preamble_tl \BODY
 }

\keys_define:nn { angelino/matlabtab }
 {
  header   .tl_set:N  = \l_angelino_matlabtab_head_tl,
  header   .initial:n = blue!20,
  legend   .tl_set:N  = \l_angelino_matlabtab_legend_tl,
  legend   .initial:n = red!20,
  diag     .tl_set:N  = \l_angelino_matlabtab_diag_tl,
  diag     .initial:n = green,
  positive .tl_set:N = \l_angelino_matlabtab_positive_tl,
  positive .initial:n = .,
  negative .tl_set:N = \l_angelino_matlabtab_negative_tl,
  negative .initial:n = .,
 }

\cs_new_protected:Nn \angelino_matlabtab:nn
 {
  \seq_set_split:Nnn \l_angelino_matlabtab_rows_seq { \hline } { #2 }
  % the first item is empty
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % the last item is empty
  \seq_pop_right:NN \l_angelino_matlabtab_rows_seq \l_tmpa_tl
  % separate the first row
  \seq_pop_left:NN \l_angelino_matlabtab_rows_seq \l_angelino_matlabtab_body_tl
  % fix the first row
  \tl_put_left:Nn \l_angelino_matlabtab_body_tl { \hline\rowcolor{\l_angelino_matlabtab_head_tl} }
  \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
  \seq_map_inline:Nn \l_angelino_matlabtab_rows_seq
   {
    \int_incr:N \l_angelino_matlabtab_currentrow_int
    \int_zero:N \l_angelino_matlabtab_currentcol_int
    \seq_set_split:Nnn \l_angelino_matlabtab_row_seq { & } { ##1 }
    \seq_pop_left:NN \l_angelino_matlabtab_row_seq \l_angelino_matlabtab_first_tl
    \tl_put_right:NV \l_angelino_matlabtab_body_tl \l_angelino_matlabtab_first_tl
    \seq_map_inline:Nn \l_angelino_matlabtab_row_seq
     {
      \int_incr:N \l_angelino_matlabtab_currentcol_int
      \int_compare:nTF { \l_angelino_matlabtab_currentcol_int == \l_angelino_matlabtab_currentrow_int }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & \cellcolor{\l_angelino_matlabtab_diag_tl} ####1 }
       }
       {
        \tl_put_right:Nn \l_angelino_matlabtab_body_tl { & \angelino_print_number:n { ####1 } }
       }
     }
    \tl_put_right:Nn \l_angelino_matlabtab_body_tl { \hline }
   }
  \begin{tabular}{#1}
  \l_angelino_matlabtab_body_tl
  \end{tabular}
 }
\cs_generate_variant:Nn \angelino_matlabtab:nn { VV }

\cs_new_protected:Nn \angelino_print_number:n
 {
  \tl_set:Nn \l_tmpa_tl { #1 }
  \tl_if_in:NnTF \l_tmpa_tl { \\ }
   {
    \tl_replace_once:Nnn \l_tmpa_tl { \\ } { }
    \__angelino_print_number:V \l_tmpa_tl
    \\
   }
   {
    \__angelino_print_number:V \l_tmpa_tl
   }
 }
\cs_new_protected:Nn \__angelino_print_number:n
 {
  \fp_compare:nTF { #1 >= 0 }
   {
    \textcolor{\l_angelino_matlabtab_positive_tl}{$#1$}
   }
   {
    \textcolor{\l_angelino_matlabtab_negative_tl}{$#1$}
   }
 }
\cs_generate_variant:Nn \__angelino_print_number:n { V }
\int_new:N \l_angelino_matlabtab_currentcol_int
\int_new:N \l_angelino_matlabtab_currentrow_int
\seq_new:N \l_angelino_matlabtab_rows_seq
\seq_new:N \l_angelino_matlabtab_row_seq
\tl_new:N \l_angelino_matlabtab_body_tl
\tl_new:N \l_angelino_matlabtab_first_tl
\tl_new:N \l_angelino_matlabtab_preamble_tl
\ExplSyntaxOff

\begin{document}

\begin{matlabtabular}{|l|c|c|c|}
\hline
&\textbf{ciao}&\textbf{ciao2}&\textbf{ciao3}\\\hline
\textbf{ciao}&0.815&0.913&0.278\\\hline
\textbf{ciao2}&-0.906&0.632&0.547\\\hline
\textbf{ciao3}&-0.127&0.098&0.958\\\hline
\end{matlabtabular}

\bigskip

\begin{matlabtabular}[positive=blue,negative=red]{|l|c|c|c|}
\hline
&\textbf{ciao}&\textbf{ciao2}&\textbf{ciao3}\\\hline
\textbf{ciao}&0.815&0.913&0.278\\\hline
\textbf{ciao2}&-0.906&0.632&0.547\\\hline
\textbf{ciao3}&-0.127&0.098&0.958\\\hline
\end{matlabtabular}

\end{document}

관련 정보