预期结果

预期结果

我有一个嵌套的foreach,其中每个循环都在相同的数字范围内。我想应用一种依赖于数字之间关系的样式(示例代码中的\m\x),即它们是否相等,第一个是否低于第二个,或者第二个是否低于第一个。

我更喜欢使用 tikz 样式的解决方案,只要它不是非常复杂,其他解决方案也是可以接受的(比如使用宏)。

示例代码

代码看起来像这样(conditional style未实现样式)。

\documentclass{minimal}
\usepackage{tikz} 
\begin{document}

\foreach \m in {1,...,3} {%
\noindent
\begin{tikzpicture}
    \foreach \x in {1,...,3} {%
        \node[conditional style=\x wrt \m] at (\x,0) {\x};
    }
\end{tikzpicture}
\par
}
\end{document}

预期结果

在下面的输出中,删除线、粗体和普通字被用作示例样式,因为据我所知 SO 不允许彩色文本。

12 3

1 23

1 2 3

答案1

这比想象中的要容易得多。以下样式甚至允许将条件样式指定为参数。

\documentclass{minimal}
\usepackage{tikz} 
\begin{document}

\foreach \m in {1,...,10} {%
\noindent
\begin{tikzpicture}[%
    compare/.code n args={5}{%
        \ifnum##1<##2
            \pgfkeysalso{##3}
        \else
            \ifnum##1>##2
                \pgfkeysalso{##5}
            \else
                \pgfkeysalso{##4}
            \fi
        \fi}
    ]
    \foreach \x in {1,...,10} {%
        \node[compare={\x}{\m}{blue}{black}{red}] at (\x,0) {\x};
    }
\end{tikzpicture}
\par
}
\end{document}

输出

在此处输入图片描述

答案2

您可以评估条件并将其传递给您自己的样式键

\documentclass{article}
\usepackage{tikz}
\tikzset{
  mystyle/.is choice,
  mystyle/.default=0,
  mystyle/1/.style=mytrue,
  mystyle/0/.style=myeq,
  mystyle/-1/.style=myfalse,
  myeq/.style={black,draw},
  mytrue/.style=blue,
  myfalse/.style=red
}
\begin{document}
\begin{tikzpicture}
\foreach \m in {1,...,10}{%
  \foreach \x in {1,...,10}{%
    \pgfmathtruncatemacro\mychoice{ifthenelse(\x==\m,0,{ifthenelse(\x>\m,1,-1)})}
    \node[mystyle=\mychoice] at (\x,-\m) {\x};
  }
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,minimal该类不是为用户设计的,而是为 LaTeX 开发人员设计的。最终用户的实际最小类是article

相关内容