如何在 Tikz 中的节点上垂直对齐矩阵?

如何在 Tikz 中的节点上垂直对齐矩阵?

我为技术手册准备了一系列带插图的表格,最后我选择使用 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=\Hugemyheader样式而无需重复\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}

输出

在此处输入图片描述

相关内容