Smartdiagram - 保持本地设置 - ?一个错误

Smartdiagram - 保持本地设置 - ?一个错误

不知道是我太笨还是这是一个 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}

在此处输入图片描述

相关内容