TikZ - 具有多个文本字段的节点

TikZ - 具有多个文本字段的节点

我怎样才能制作一个可重复的节点(这里的节点可能不是正确的词),如下所示:

复杂节点

这些Field值是单独的输入文本。

我曾考虑过使用\newcommand它来制作外部节点,然后用其他节点和文本填充外部节点的内部,但是我用完了参数;\newcommand最多需要 9 个输入,而这将需要 10 个输入加上外部节点的定位和标记。

有一个 TeX hack“允许”超过 9 个输入:如何定义接受超过 9 个参数的命令

有一个更好的方法吗?

第一次尝试

这开始看起来像是什么东西了。

第一次尝试

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newcommand\iitem[3]{%say
    \node [#1,minimum size=3cm] (#2) {};
    \node [anchor=north west] (title) at (#2.north west) {\footnotesize Title};
    \node [anchor=north west] (title field) at (title.south east) {\footnotesize #3};
}

\begin{document}
\begin{tikzpicture}

\iitem{draw}{test}{demo title};
%\node[left=of test,draw] (test 2) {test 2 node};

\end{tikzpicture}
\end{document}

答案1

您可以\newcommand只使用一个参数,但该参数由/s(正斜杠)分隔的所有 10 个字段组成。然后\foreach(由于只有一个参数,因此实际上并不循环)可用于将每个字段读入不同的变量。

如果任何“字段”包含正斜杠,则必须将其括在括号中,例如,{Field/1}/{Field/2}/...

然后,宏的其余部分用线条和矩形绘制图像,并将文本作为内容。您可以更改和node的值来调整图像的大小。\fieldheight\fieldwidth

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}

\newcommand{\fieldheight}{.5cm}
\newcommand{\fieldwidth}{1.5cm}
\newcommand{\makecard}[1]{\tikz[font=\sffamily, text height=1.5ex, text depth=0ex]{
    \foreach \ffa/\ffb/\ffc/\ffd/\ffe/\fff/\ffg/\ffh/\ffi/\ffj in {#1}{
    \draw[thick] (0,0) node[below right]{Title} rectangle (4*\fieldwidth,-9*\fieldheight);
    \draw (0,-2*\fieldheight)rectangle node[above]{\ffa}(4*\fieldwidth,-2*\fieldheight);
    \draw (0,-3*\fieldheight)node[above right]{Dwg No.}-- node[above, pos=.65]{\ffb}(4*\fieldwidth,-3*\fieldheight);
    \draw (0,-4*\fieldheight)node[above right]{SCH No.}-- node[above, pos=.65]{\ffc}(4*\fieldwidth,-4*\fieldheight);
    \draw (0,-5*\fieldheight)node[above right]{Ref Des}-- node[above, pos=.75]{Qty}(4*\fieldwidth,-5*\fieldheight);
    \draw (0,-6*\fieldheight)node[above right]{\ffd}-- node[above, pos=.75]{\ffe}(4*\fieldwidth,-6*\fieldheight);
    \draw (0,-8*\fieldheight)node[above right]{\fff} rectangle (\fieldwidth,-7*\fieldheight);
    \draw (\fieldwidth,-8*\fieldheight)node[above right]{\ffg} rectangle (2*\fieldwidth,-7*\fieldheight);
    \draw (2*\fieldwidth,-8*\fieldheight)node[above right]{\ffh} rectangle (3*\fieldwidth,-7*\fieldheight);
    \draw (3*\fieldwidth,-8*\fieldheight)node[above right]{\ffi} rectangle (4*\fieldwidth,-7*\fieldheight);
    \path (0,-9*\fieldheight)rectangle node[above]{\ffj}(4*\fieldwidth,-9*\fieldheight);
}}}

\begin{document}

\makecard{Field 1/Field 2/Field 3/Field 4/Field 5/Field 6/Field 7/Field 8/Field 9/Field 10}

\end{document}

答案2

TikZ此处不需要。您的“节点”是一个简单的tabular

\documentclass[border=1mm]{standalone}
\usepackage{pgffor}

\newcommand\fieldWidth{1.3cm}
\newcommand\makecard[1]{%
    \foreach \ffa/\ffb/\ffc/\ffd/\ffe/\fff/\ffg/\ffh/\ffi/\ffj in {#1} {%
        \sffamily%
        \begin{tabular}{|p{\fieldWidth}p{\fieldWidth}p{\fieldWidth}p{\fieldWidth}|}
            \hline
            \multicolumn{4}{|l|}{Title}\\
            & \multicolumn{2}{c}{\ffa} & \\
            \hline
            Dwg No. && \multicolumn{1}{c}{\ffb} & \\
            \hline
            SCH No. && \multicolumn{1}{c}{\ffc} & \\
            \hline
            Ref Des && \multicolumn{2}{c|}{Qty}\\
            \hline
            \ffd && \multicolumn{2}{c|}{\ffe}\\
            \hline
            &&&\\
            \hline
            \multicolumn{1}{|l|}{\fff} & \multicolumn{1}{l|}{\ffg} & \multicolumn{1}{l|}{\ffh} & \multicolumn{1}{l|}{\ffi}\\
            \hline
            \multicolumn{4}{|c|}{\ffj}\\
            \hline
        \end{tabular}%
    }%
}

\begin{document}
    \makecard{Field 1/Field 2/Field 3/Field 4/Field 5/Field 6/Field 7/Field 8/Field 9/Field 10}
\end{document}

输出

相关内容