这就是我想要实现的目标:
我的 MWE 如下:
\documentclass{article}
\pagestyle{empty}
\usepackage{lmodern}
\usepackage{smartdiagram}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{positioning}
\tikzstyle{every picture}+=[remember picture]
\smartdiagramset{%
circular distance=40mm,
font=\normalsize,
text width=20mm,
module minimum width=30mm,
module minimum height=30mm,
module shape=diamond,
arrow tip=to,
%uniform arrow color=true,
arrow color=gray!50!black,
border color=black,
set color list={white,white,white,white,white,white}
}
\tikzstyle{mystyle}=[align=center,fill=white,drop shadow,draw,thick,circle,overlay,minimum width=20mm,text width=25mm]
\begin{document}
~\vfill
\smartdiagram[circular diagram]{a, b, c, d, e, f}
\tikz \node (a) [mystyle,above=10mm of module1] {Start};
\tikz \node (b) [mystyle,right=10mm of module6] {Finish};
\begin{tikzpicture}[overlay,>=to]
\path[->,gray!50!black,line width=3pt,fill=gray!50!black] (a) edge (module1);
\path[->,gray!50!black,line width=3pt,fill=gray!50!black] (module6) edge (b);
\end{tikzpicture}
\vfill
\end{document}
我会以更直观的方式实现类似的结果。如您所见,我需要进入内部smartdiagram.sty
才能知道节点的命名方式,然后我需要使用overlay
。此外,欢迎提出有关开始和结束的建议。
答案1
使用该软件包的 0.3 版本(已在 CTAN 上发送,因此几天后即可在 TeXLive 上获取),创建这样的图表会更容易一些。
代码:
\documentclass[12pt]{article}
\usepackage{smartdiagram}
\usesmartdiagramlibrary{additions} % library to create annotations
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{center}
\smartdiagramset{%
circular distance=40mm,
text width=20mm,
module minimum width=30mm,
module minimum height=30mm,
module shape=diamond,
arrow tip=to,
uniform arrow color=true,
arrow color=gray!50!black,
border color=black,
uniform color list=white for 6 items, % new key to make colors uniform easily
circular final arrow disabled=true, % new key to remove the final arrow
additions={
additional item offset=15mm,
additional item shape=circle,
additional item border color=black,
additional item shadow=drop shadow,
additional arrow color=gray!50!black,
}
}
\smartdiagramadd[circular diagram]{a, b, c, d, e, f}{
above of module1/Start,right of module6/End}
\smartdiagramconnect{-to}{additional-module1/module1}
\smartdiagramconnect{-to}{module6/additional-module2}
\end{center}
\end{document}
结果:
这种方法不再受到可添加数量的限制。
第一个版本
首先声明:我提供的解决方案作品当且仅当必须添加一个开始和结尾参见图表。
它提供了一个新命令\smartdiagramadd
,可以设置通常的图表以及开始/结束:它接收 3 个参数:
- 图表类型
- 图表中的元素列表
position/text
开始,position/text
结束(例如above/Start,right/End
:)。
它可以用作:
\smartdiagramadd[circular diagram]{a, b, c, d, e, f}{above/Start,right/End}
此外,该解决方案允许通过两个新键自定义开始/结束模块的距离:
\pgfkeys{/smart diagram/.cd,
add start module offset/.initial=10mm,
add start module offset/.get=\addstartmodoffset,
add start module offset/.store in=\addstartmodoffset,
add end module offset/.initial=10mm,
add end module offset/.get=\addendmodoffset,
add end module offset/.store in=\addendmodoffset,
}
它们应始终在内使用\smartdiagramset
;例如:
\smartdiagramset{add end module offset=20mm}
现在,代码:
\documentclass{article}
\pagestyle{empty}
\usepackage{lmodern}
\usepackage{smartdiagram}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{positioning}
\pgfkeys{/smart diagram/.cd,
add start module offset/.initial=10mm,
add start module offset/.get=\addstartmodoffset,
add start module offset/.store in=\addstartmodoffset,
add end module offset/.initial=10mm,
add end module offset/.get=\addendmodoffset,
add end module offset/.store in=\addendmodoffset,
}
\smartdiagramset{%
circular distance=40mm,
font=\normalsize,
text width=20mm,
module minimum width=30mm,
module minimum height=30mm,
module shape=diamond,
arrow tip=to,
uniform arrow color=true,
arrow color=gray!50!black,
border color=black,
set color list={white,white,white,white,white,white}
}
\tikzset{module start-end/.style={
align=center,
fill=white,
drop shadow,
draw,
thick,
circle,
minimum width=20mm,
text width=25mm}
}
\NewDocumentCommand{\smartdiagramadd}{r[] m m}{
\tikzstyle{every picture}+=[remember picture]
\smartdiagram[#1]{#2}
\begin{tikzpicture}[overlay]
\foreach \smitem [count=\xi] in {#2} {\global\let\numitems\xi}
\StrCut{#3}{,}\startdiagram\enddiagram
% start
\StrCut{\startdiagram}{/}\pos\textitem
\node (module1-start) [module start-end,\pos=\addstartmodoffset of module1] {\textitem};
\path[->,gray!50!black,line width=3pt,fill=gray!50!black]
(module1-start) edge (module1);
% end
\StrCut{\enddiagram}{/}\pos\textitem
\node (module\numitems-end) [module start-end,\pos=\addendmodoffset of module\numitems] {\textitem};
\path[->,gray!50!black,line width=3pt,fill=gray!50!black]
(module\numitems) edge (module\numitems-end);
\end{tikzpicture}
}
\begin{document}
\begin{center}
\smartdiagramset{add end module offset=20mm}
\smartdiagramadd[circular diagram]{a, b, c, d, e, f}{above/Start,right/End}
\end{center}
\end{document}
给出的结果(类似于 OP 提供的图片,但最终模块很远):
免责声明
此解决方案仅适用于smartdiagram
已加载的 0.2 版本xstring
,否则应单独加载该包。