不知道是我太笨还是这是一个 bug。我在将智能图表设置保留在图表本地时遇到了很大问题。一个图表中的设置会对同一文档中的其他图表产生副作用,并且图表会根据呈现的顺序而有所不同。
我原本以为组内的设置应该保持本地化——有时确实如此,但通常却不如此。
采取以下 MWE 和结果输出。图 A 和 C 完全相同,并且各自位于一个组中。图 A 中较大的中心行星尺寸不会延续到图 B,即使图 B 没有明确设置行星尺寸(到目前为止一切顺利)。
然而,图 B 重置了箭头(为统一颜色)并重置了卫星的颜色——这两项更改再次在一个组内进行。
图 C(与 A 相同)“看到”这些变化并保留卫星的重新着色,并对箭头颜色做了一些奇怪的事情(使一些统一但其他不统一)。
这肯定是个错误?那么我该如何确保更改始终绝对且本地化?
\documentclass{article}
\usepackage{smartdiagram}
\begin{document}
%Diagram A
\begingroup
\smartdiagramset{
planet size=4.0cm,
satellite size=1.0cm,
}
\smartdiagram[constellation diagram]{A,1,2,3,4,5,6 }
\endgroup
%Diagram B
\begingroup
\smartdiagramset{
% planet size=1.5cm,
satellite size=1.0cm,
set color list={red, red,red},
uniform connection color=true,
}
\smartdiagram[constellation diagram]{B,1,2,3,4,5,6 }
\endgroup
%Diagram C - identical to A
\begingroup
\smartdiagramset{
planet size=4.0cm,
satellite size=1.0cm,
}
\smartdiagram[constellation diagram]{C,1,2,3,4,5,6 }
\endgroup
\end{document}
答案1
所执行的定义set color list
是全局的:
% smartdiagramlibrarycore.definitions.code.tex lines 161-166
\pgfkeys{/smart diagram/.cd, set color list/.code={%
\foreach \listitem [count=\i] in {#1}{%
\global\@namedef{color@\i\expandafter}\expandafter{\listitem}%
}%
}%
}
这个问题可以这样修复:
\documentclass{article}
\usepackage[landscape,a3paper]{geometry}
\usepackage{smartdiagram}
\makeatletter
\pgfkeys{
/smart diagram/.cd, set color list/.code={%
\xdef\sm@global@temp{}%
\foreach \listitem [count=\i] in {#1}{%
\xdef\sm@global@temp{%
\unexpanded\expandafter{\sm@global@temp}%
\noexpand\@namedef{color@\i}{\listitem}%
}%
}%
\sm@global@temp
}%
}
\makeatother
\begin{document}
%Diagram A
\begingroup
\smartdiagramset{
planet size=4.0cm,
satellite size=1.0cm,
}
\smartdiagram[constellation diagram]{A,1,2,3,4,5,6}
\endgroup
%
%Diagram B
\begingroup
\smartdiagramset{
planet size=1.5cm,
satellite size=2.0cm,
set color list={red, red,red},
uniform connection color=true,
}
\smartdiagram[constellation diagram]{B,1,2,3,4,5,6}
\endgroup
%
%Diagram C - identical to A
\begingroup
\smartdiagramset{
planet size=3.0cm,
satellite size=3.0cm,
}
\smartdiagram[constellation diagram]{C,1,2,3,4,5,6}
\endgroup
\end{document}