我想使用包 datatool 将不同的名称放在一个图像的指定空间中。为了方便大家,我在这里创建了一个 tikzpicture 而不是图像。请查看此最小代码。
\begin{filecontents}{abcd.csv}
a, b, c
Niranjan, Tambe, Vikas
Sushant, Devalekar, Shankar
Pranav, Patwardhan, Sachin
\end{filecontents}
\documentclass{article}
\usepackage{datatool}
\usepackage{tikz}
\DTLloaddb{abc}{abcd.csv}
\begin{document}
\DTLforeach{abc}{\firstname=a,\surname=b,\father=c}{\begin{tikzpicture}
\draw (-3,0) node[above]{\firstname{} \father{} \surname{} \\} -- (3,0);
\end{tikzpicture}\\
}
\end{document}
如果我们查看输出,我得到了该行上方的名称。现在我想做更多的事情,但我不知道该怎么做。我希望每个名字都位于该行的中心。请注意,node
like的可选参数[near end]
现在对我来说没用,因为我想在 .jpg 图像上实现所有这些。现在让我们假设所呈现的 tikz 代码已冻结,我们无法更改它。它在这里只是为了方便起见并避免上传文件。我想要一些东西,可以让我指定文档的某些部分并在其上应用常规 LaTeX 命令。请建议我如何让 LaTeX在文档的指定部分“仅”应用一些命令,例如centering
或环境。center
答案1
我不确定我是否理解了这个问题。但您可以在 tikzpicture 中设置坐标,然后使用它们来放置文本:
\begin{filecontents}{abcd.csv}
a, b, c
Niranjan, Tambe, Vikas
Sushant, Devalekar, Shankar
Pranav, Patwardhan, Sachin
\end{filecontents}
\documentclass{article}
\usepackage{datatool}
\usepackage{tikz}
\usetikzlibrary{calc}
\DTLloaddb{abc}{abcd.csv}
\begin{document}
\begin{tikzpicture}[remember picture]
\draw (-3,0)coordinate(a1) -- (3,0)coordinate(b1);
\draw (-2,1)coordinate(a2) -- (4,1)coordinate(b2);
\draw (-1,2)coordinate(a3) -- (4,2)coordinate(b3);
\end{tikzpicture}
\DTLforeach{abc}{\firstname=a,\surname=b,\father=c}{%
\begin{tikzpicture}[remember picture, overlay]
\node[above] at ($(a\number\value{DTLrowi})!0.5!(b\number\value{DTLrowi})$)
{\firstname{} \father{} \surname{}};
\end{tikzpicture}}
\end{document}
您可以使用 tikz 在图像上放置一个(不可见的)网格,然后使用像我示例中的坐标来添加文本。参见例如覆盖文本+矩形标签图像的最简单方法?和使用 TikZ 在图像上绘图。