编辑由于粗心大意,我错误地表达了我所得到的错误。我已经修正了示例代码和我的评论。
我希望能够设置 1 Ti钾Z 节点.style
由条件改变。优点是只有一个.style
而不是多个。简单条件有效,但任何要求\ifsometest something=something else \fi
都会失败。
平均能量损失
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\newif\ifdash
\newif\ifdouble
\def\doublecolor{yellow}
\def\mydots{dash dot dot}
\tikzset{%
boxes/.style={%
thick,
draw,
% This works:
\ifdash \mydots\fi,
% This works:
% double=\doublecolor,
% But this causes error: Use of \pgfkeys@sp@b doesn't match its definition.
\ifdouble double=\doublecolor \fi,
% As does this:
% \ifdouble double/.expand once=\doublecolor\fi,
}%
}
\begin{document}
\tikz\node[boxes] {\begin{minipage}{4in}\lipsum[1]\end{minipage}};
\dashtrue
\tikz\node[boxes] {\begin{minipage}{4in}\lipsum[1]\end{minipage}};
\end{document}
此操作失败并显示以下错误消息:
./if-in-node-options.tex:30: Use of \pgfkeys@sp@b doesn't match its definition.
\pgfkeys@spdef ...e \pgfkeys@sp@a #2\pgfkeys@stop
\pgfkeys@stop \pgfkeys@st...
l.30 \tikz\node[boxes]
{\begin{minipage}{4in}\lipsum[1]\end{minipage}};
问题是这样的:有没有办法做类似的事情:
\ifdouble double=\doublecolor\fi
还是不?再说一遍,尽管根据要求可以有多种风格——我已经这样做了——但如果可能的话,我正在寻找更简单的东西。
答案1
我建议如下:
\tikzset{%
boxes/.code={
\pgfkeysalso{
thick,
draw
}
\ifdouble
\pgfkeysalso{double=\doublecolor}
\fi
}%
}
some key/.style={some other keys,...}
是 的简写some key/.code={\pgfkeysalso{some other keys,...}}
。如果您的样式代码中需要任何逻辑,一种解决方案是回退到使用/.code
处理程序并\pgfkeysalso
围绕实际键。
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\newif\ifdash
\newif\ifdouble
\def\doublecolor{yellow}
\def\mydots{dash dot dot}
\tikzset{%
boxes/.code={
\pgfkeysalso{
thick,
draw
}
\ifdouble
\pgfkeysalso{double=\doublecolor}
\fi
}%
}
\begin{document}
\tikz\node[boxes] {\begin{minipage}{4in}\lipsum[1]\end{minipage}};
\dashtrue
\tikz\node[boxes] {\begin{minipage}{4in}\lipsum[1]\end{minipage}};
\end{document}
答案2
该问题的方法存在两个问题:
语法字符
=
和,
不应该位于\if
构造内。中的选项设置
\tikzset
将立即执行。\if
稍后设置的开关无效。
下面的示例使用样式向 style 添加附加属性boxes
。
\documentclass{article}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\def\doublecolor{yellow}
\def\mydots{dash dot dot}
\tikzset{%
boxes/.style={%
thick,
draw,
},
set dash/.style={%
boxes/.append style={\mydots},%
},%
set double/.style={%
boxes/.append style={double=\doublecolor},%
},%
}
\begin{document}
\tikz\node[boxes] {\begin{minipage}{4in}\lipsum[2]\end{minipage}};
\medskip
\tikz[set dash, set double]
\node[boxes] {\begin{minipage}{4in}\lipsum[2]\end{minipage}};
\end{document}