
次の図の「コア 1」を残りのノードと揃えようとしています。
しかし、何らかの理由で、Core 1 ノードは他のノードと比較してオフセットされているように見えますが、その理由はよくわかりません。これが私のコードです:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows, calc, chains, positioning, shapes}
\tikzset
{
core/.style = {
rectangle,
rounded corners,
draw = black, thick,
text width = 5em,
minimum height = 3em,
align=center,
on chain
},
cache/.style = {
core,
draw = gray,
}
}% end of tikzset
\begin{document}
\begin{tikzpicture}[
node distance = 4mm,
start chain = going below ]
\node [core, minimum width=4cm,midway] (c1) {Core 1};
\node [cache] (l11) {L1 data\\ 32 KB};
\node [cache,right=of l11] (l12) {L1 \\ 32 KB};
%shared l2 cache
\path let \p1 = ($(l12.east)-(l11.west)$),
\n1 = {veclen(\x1,\y1)} in
node [core,minimum width = \n1,
below=of $(l11.south)!0.5!(l12.south)$] (l13) {L2 \\ 256 KB};
\end{tikzpicture}
\end{document}
答え1
これを修正する方法は多数ありますが、これはその 1 つです。1 つの問題がon chain
鍵でした。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\tikzset
{
core/.style = {
rectangle,
rounded corners,
draw = black, thick,
text width = 5em,
minimum height = 3em,
align=center,
},
cache/.style = {
core,
draw = gray,
}
}% end of tikzset
\begin{document}
\begin{tikzpicture}[node distance = 4mm]
\node [core, minimum width=4.5cm,midway] (c1) {Core 1};
\node [cache,below=of c1.south west,anchor=north west] (l11) {L1 data\\ 32 KB};
\node [cache,below=of c1.south east,anchor=north east] (l12) {L1 \\ 32 KB};
%shared l2 cache
\path let \p1 = ($(l12.east)-(l11.west)$),
\n1 = {veclen(\x1,\y1)} in
node [core,minimum width = \n1,
below=of $(l11.south)!0.5!(l12.south)$] (l13) {L2 \\ 256 KB};
\end{tikzpicture}
\end{document}
この場合、下位ノードの幅を計算する必要はありませんが、他の場合に関係する可能性があるため、計算は残しておいたことに注意してください。中間層のノードから始めて、この幅の計算を使用して他のノードを構築することもできます。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc, positioning}
\tikzset
{
core/.style = {
rectangle,
rounded corners,
draw = black, thick,
minimum width = 5em,
minimum height = 3em,
align=center,
},
cache/.style = {
core,
draw = gray,
}
}% end of tikzset
\begin{document}
\begin{tikzpicture}[node distance = 4mm]
\node [cache] (l11) {L1 data\\ 32 KB};
\node [cache,right=of l11] (l12) {L1 \\ 32 KB};
%shared l2 cache
\path let \p1 = ($(l12.east)-(l11.west)$),
\n1 = {veclen(\x1,\y1)} in
node [core,minimum width = \n1,
below=of $(l11.south)!0.5!(l12.south)$] (c2) {L2 \\ 256 KB}
node [core,minimum width = \n1,
above=of $(l11.north)!0.5!(l12.north)$] (c1) {Core 1}
;
\end{tikzpicture}
\end{document}
これにより、キャッシュ ノードが広くなっても引き続き良好な結果が得られます。
答え2
他の回答の小さなバリエーション:
\documentclass[tikz,border=5mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
node distance = 4mm and 0mm,
box/.style args = {#1/#2}{draw=#1, minimum width=#2,
rounded corners=5, minimum height=10mm,
align=center},
box/.default = gray/22mm
]
\node (n1) [box=black/50mm] {L2\\256 Kb};
\node (n21)[box, above right=of n1.north west] {L1 data\\32 Kb};
\node (n22)[box, above left=of n1.north east] {L1 \\32 Kb};
\node (n3) [box=black/50mm, above=of n1 |- n21.north] {Core 1};
\end{tikzpicture}
\end{document}
答え3
以下は友人のコードです。彼のコードは短くてシンプルです (これ以上シンプルにすることはできません)。エレガントなシンプルさでコードを書くのは正しいことでしょうか?
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\path[every node/.style={draw,rounded corners=5,minimum height=10mm,align=center}]
(0,0) node[minimum width=5cm]{Core 1}
(-1.5,-1.5) node[minimum width=2cm,draw=gray]{L1 data\\32 Kb}
(1.5,-1.5) node[minimum width=2cm,draw=gray]{L1\\32 Kb}
(0,-3) node[minimum width=5cm]{L2\\256 Kb};
\end{tikzpicture}
\end{document}