如何让 tikz 节点矩阵根据每个节点中文本的实际宽度动态确定列宽(无需我手动对每个列宽进行硬编码)?理想情况下,tikz 会将表格识别为对象,因此我可以相对于它定位其他 tikz 对象(mat1 的 right= 等)。这是一个(非常笨重的)photoshop 模型,我希望输出看起来像这样: 我当前的设置分别更改每个单独节点的节点宽度,我希望将其扩展到整个列:
\documentclass[11pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
table/.style={
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={rectangle,draw=black,align=center},
text depth=0.25ex,
text height=1ex,
nodes in empty cells
}}
\begin{document}
\begin{tikzpicture}
\matrix[table] (mat1)
{
Text&Long text&\\
&&Very long text\\
};\end{tikzpicture}
\end{document}
答案1
它非常简单,通过使用基于包的包(版本 5.0 或最新版本NiceTabular
):nicematrix
tikz
\documentclass[varwidth, border=3.141592]{standalone}
\usepackage{nicematrix}
\usepackage{lipsum}
\begin{document}
\begin{center}
\begin{NiceTabular}{|c|c|c|}%
\hline
Text & Long text & \\ \hline
& & Very long text\\ \hline
\end{NiceTabular}
\end{center}
\end{document}
对上述 MWE 进行至少两次编译后,将生成以下结果:
附录:
从您的评论可以看出,您的问题不清楚。第一次尝试时,我认为您出于某种原因喜欢将 table 写为 TikZ matrix
。现在看来您实际上需要某个节点中的 table ,例如下图所示,它是某些 TikZ 图片的一部分:
这可以通过使用 TikZ 节点中的表标准简单实现:
\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
positioning}
\usepackage{hhline}
\begin{document}
\begin{tikzpicture}
\node (n1) [inner sep=0pt] {\begin{tabular}{|c|c|c|}%
\hhline{|---|}
Text & Long text & \\
\hhline{|---|}
& & Very long text\\
\hhline{|---|}
\end{tabular}
};
\node (n2) [draw, rounded corners, align=left,
right=of n1] {second\\ node};
\draw[very thick, -Straight Barb] (n1) -- (n2);
\end{tikzpicture}
\end{document}
答案2
最简单的方法可能是使用\phantom{}
它,它不是任何 tikz 库的一部分,而是一个\LaTeX
命令,据我所知。
\documentclass[11pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
table/.style={
matrix of nodes,
row sep=-\pgflinewidth,
column sep=-\pgflinewidth,
nodes={rectangle,draw=black,align=center},
text depth=0.25ex,
text height=1ex,
nodes in empty cells
}}
\begin{document}
\begin{tikzpicture}
\matrix[table]
{
Text&Long text&\phantom{Very long text}\\
\phantom{Text}&\phantom{Long text}&Very long text\\
};\end{tikzpicture}
\end{document}