我有一个嵌套的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
123
123
答案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
。