我怎样才能制作一个可重复的节点(这里的节点可能不是正确的词),如下所示:
这些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}