![Tikz 节点位于列表中的两列中](https://linux22.com/image/439189/Tikz%20%E8%8A%82%E7%82%B9%E4%BD%8D%E4%BA%8E%E5%88%97%E8%A1%A8%E4%B8%AD%E7%9A%84%E4%B8%A4%E5%88%97%E4%B8%AD.png)
我想做以下事情。我想遍历一个二维列表,并将 tikz 节点放在两列中。每个元素包含以下信息:节点名称和节点文本。
\documentclass{article}
\usepackage{listofitems}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{listofitems}
\usepackage{datatool}
\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\DTLsetseparator{,}
\DeclareListParser{\MyListParser}{-}
\newcommand\addcase[3]{\expandafter\def\csname\string#1@case@#2\endcsname{#3}}
\newcommand\makeswitch[2][]{%
\newcommand#2[1]{%
\ifcsname\string#2@case@##1\endcsname\csname\string#2@case@##1\endcsname\else#1\fi%
}
}
\begin{document}
\DTLloaddb{list}{database2.csv}
%\DTLsetseparator{,}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes, nodes={align=left, text width=3cm}
]
{
\DTLforeach*{list}{\Nummer=zahl,\Texteins=texteins,\Buchstabe=buchstabe,\Textzwei=textzwei} {
\node ( \Nummer ) { \Nummer \Texteins }; & \node ( \Buchstabe ) {\Buchstabe \Textzwei}; \\
}
};
}
\end{tikzpicture}
\end{document}
它最终读取了简单的 .csv 文件。然而 LaTeX 却挂了
先感谢您。
答案1
\documentclass{article}
\usepackage{listofitems}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes.geometric, arrows}
\usetikzlibrary{positioning}
\usetikzlibrary{calc,shapes.multipart,chains}
\usepackage{listofitems}
\usepackage{datatool}
\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage{varwidth}
\pgfmathsetlengthmacro\breite{5cm}
\pgfmathsetlengthmacro\hoehe{2.567cm}
\pgfmathsetlengthmacro\InnerSep{0.4cm}
\DTLsetseparator{,}
\DeclareListParser{\MyListParser}{-}
\newcommand\addcase[3]{\expandafter\def\csname\string#1@case@#2\endcsname{#3}}
\newcommand\makeswitch[2][]{%
\newcommand#2[1]{%
\ifcsname\string#2@case@##1\endcsname\csname\string#2@case@##1\endcsname\else#1\fi%
}
}
\begin{document}
\DTLloaddb{list}{database2.csv}
%\DTLsetseparator{,}
\begin{center}
\begin{tikzpicture}
\tikzset{
line/.style={draw, -latex'},
max width/.style args={#1}{
execute at begin node={\begin{varwidth}{#1}},
execute at end node={\end{varwidth}}
}}
% \matrix (m) [matrix of nodes]{
\DTLforeach*{list}{\Nummer=zahl,\Texteins=texteins,\Buchstabe=buchstabe,\Textzwei=textzwei,\Losung=losung} {
\node [rectangle, max width=5cm,inner sep=0pt, minimum width=5cm, text width=\breite-\InnerSep,
align=justify](\Nummer) at (0,-\value{DTLrowi}-0.2) {\Nummer \Texteins~} ; \node[rectangle, anchor=center,minimum width=8cm, align=justify,max width=8cm,text width=8cm-\InnerSep] (\Buchstabe) at (8,-\value{DTLrowi}-0.2){\Buchstabe \quad \Textzwei\hspace{60pt}};
}
%};
\end{tikzpicture}
\end{center}
\end{document}
好的,基本上,我正在对 CSV 文件进行(逐行)迭代,并使用行号 (-\value{DTLrowi}) 作为 y 坐标,在节点之间的空间中添加另一个 -0.2。我目前正在使用 \matrix 进行解决方案,这样无论文本有多长,它都将是固定的直列。但是,在取消注释 \matrix 部分时,我遇到了问题(“}”似乎丢失了)。