tikz矩阵中的动态(但统一)列宽

tikz矩阵中的动态(但统一)列宽

如何让 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):nicematrixtikz

\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}

在此处输入图片描述

相关内容