![如何在 Tikz 中的节点上垂直对齐矩阵?](https://linux22.com/image/273036/%E5%A6%82%E4%BD%95%E5%9C%A8%20Tikz%20%E4%B8%AD%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%8A%E5%9E%82%E7%9B%B4%E5%AF%B9%E9%BD%90%E7%9F%A9%E9%98%B5%EF%BC%9F.png)
我为技术手册准备了一系列带插图的表格,最后我选择使用 Tikz 的“节点矩阵”选项。但是我无法将“40”或“40C1”等大标签与上面的图形居中(在同一垂直中心线上)。如何做到这一点?奇怪的是,底部的标签(例如“40 个联系人 #20”)完全对齐。
\documentclass{article}
\usepackage[draft]{graphicx}
\usepackage{tikz}
\begin{document}
\centering
\begin{tikzpicture} [font=\sf,
mynode/.style={rectangle, text width = 4.5 cm, anchor=north, inner sep=0pt},
myheader/.style={rectangle, fill, color=blue!20, text width = 4.55cm, text=black, text centered, font={\Huge, \sf}, inner sep=5pt},
mylabel/.style={rectangle, fill, minimum height=10ex, color=black!10, text=black, text width = 4.55 cm, anchor=north, inner sep=5pt},
]
\matrix [column sep=0pt , row sep=0mm, align=center, draw, rectangle]
{
\node {\includegraphics[width=0.3\textwidth]{40Insert.pdf}}; &
\node {\includegraphics[width=0.3\textwidth]{40C1Inser.pdf}};
&\node {\includegraphics[width=0.3\textwidth]{45Insert.pdf}}; \\
\node [myheader]{40};&\node [myheader]{40C1};&\node [myheader]{45}; \\
\node [mylabel] {40 contacts \#20 };
&\node [mylabel] {39 contacts \#20 \\ 1 coax or triax contact \#5 \\ or 1 contact \#10};
&\node [mylabel] {45 contacts \#20};\\
\node [mynode] {};& \node [mynode]{}; &\node [mynode]{};\\
\node [mynode] {};& \node [mynode]{}; &\node [mynode]{};\\
};
\end{tikzpicture}
\end {document}
答案1
键font
不会像列表那样被处理,但内容将简单地在节点内容之前使用。只需声明
font=\Huge\sffamily
并且逗号的宽度不会显示为水平空间。
(您可能已经注意到,我还使用了 LaTeX 宏\sffamily
代替了旧的 TeX 宏\sf
,请参阅我使用 \textit 或 \it、\bfseries 或 \bf 等有关系吗。
在半相关的注释中,查看matrix
库和宏matrix of nodes
的选项\matrix
。有了这些,您可以简单地使用单元格中的节点内容并定义,比如
row 2/.style={nodes=myheader}
如果你想要一个累积font
密钥定义
\makeatletter
\tikzset{
add font/.code=\expandafter\def\expandafter\tikz@textfont\expandafter{\tikz@textfont#1}}
\makeatother
现在您可以使用add font=\Huge
该myheader
样式而无需重复\sffamily
。
\sffamily
另一个想法是直接在环境中使用tikzpicture
,这也可以作为一种风格:
\tikzset{set font to sf/.code=\sffamily}
或者你定义每张图片都包含在内\sffamily
:
\tikzset{every picture/.append style={execute at begin picture=\sffamily}}
代码
\PassOptionsToPackage{draft}{graphicx}
\documentclass[tikz,convert=false]{standalone}
\begin{document}
\begin{tikzpicture}[
font=\sffamily,
mynode/.style={
rectangle,
text width = 4.5cm,
anchor=north,
inner sep=0pt},
myheader/.style={
rectangle,
fill,
color=blue!20,
text width=4.55cm,
text=black,
font=\Huge\sffamily,
inner sep=5pt},
mylabel/.style={
rectangle,
fill,
minimum height=10ex,
color=black!10,
text=black,
text width=4.55cm,
anchor=north,
inner sep=5pt}
]
\matrix [column sep=0pt, row sep=0mm, align=center, draw, rectangle]{
\node {\includegraphics[width=0.3\textwidth]{40Insert.pdf}}; &
\node {\includegraphics[width=0.3\textwidth]{40C1Inser.pdf}}; &
\node {\includegraphics[width=0.3\textwidth]{45Insert.pdf}}; \\
\node [myheader]{40}; &
\node [myheader]{40C1}; &
\node [myheader]{45}; \\
\node [mylabel] {40 contacts \#20 }; &
\node [mylabel] {39 contacts \#20 \\ 1 coax or triax contact \#5 \\ or 1 contact \#10}; &
\node [mylabel] {45 contacts \#20}; \\
\node [mynode] {}; &
\node [mynode]{}; &
\node [mynode]{}; \\
\node [mynode] {}; &
\node [mynode]{}; &
\node [mynode]{}; \\
};
\end{tikzpicture}
\end{document}