请考虑以下代码。它使用 生成一个表格,该表格tabularray
具有固定宽度的列,因此其总宽度小于。如何找出表格的总宽度,以便我可以将此长度传递给其他包(例如或)并创建与表格宽度完全相同的图片或框?请注意,在下面的例子中,由 创建的框略微偏左,为什么?可以固定吗?并且也比由 创建的矩形略小,尽管它们的宽度几乎相同,为 15 厘米。\textwidth
tikz
tcolorbox
tcolorbox
tikz
\documentclass[12pt]{article}
\usepackage[a4paper, total={180mm,257mm},left=15mm,top=20mm]{geometry}
\usepackage{tabularray}
\usepackage{tikz,tcolorbox,blindtext}
\begin{document}
\begin{tblr}{colspec={Q[3.2cm,c]Q[5.2cm,c]Q[5.2cm,c]},rows={0.8cm,m},vlines,hlines}
Column 1 & Column 2 & Column 3 \\
A11 & A12 & A13 \\
A221 & A22 & A23 \\
\end{tblr}
\vspace{10pt}
\begin{tikzpicture}
\draw (0,0) rectangle (15,4);
\end{tikzpicture}
\begin{tcolorbox}[width=15cm]
\blindtext[1]
\end{tcolorbox}
\end{document}
答案1
您可以使用
\settowidth
宏来测量表格的宽度。为了避免对表格进行两次编码,您可以使用保存框,一次使用它来排版表格,另一次使用它来测量宽度。tcolorbox 不会向左移动,而是其他所有内容都会从您使用的类的正常段落缩进向右移动。您可以通过使用
\noindent
或全局更改 parindent 长度来避免这种情况
\documentclass[12pt]{article}
\usepackage[a4paper, total={180mm,257mm},left=15mm,top=20mm]{geometry}
\usepackage{tabularray}
\usepackage{tikz,tcolorbox,blindtext}
\newlength{\foo}
\newsavebox{\mybox}
\begin{document}
\savebox{\mybox}{\begin{tblr}{colspec={Q[3.2cm,c]Q[5.2cm,c]Q[5.2cm,c]},rows={0.8cm,m},vlines,hlines}
Column 1 & Column 2 & Column 3 \\
A11 & A12 & A13 \\
A221 & A22 & A23 \\
\end{tblr}}
\noindent\usebox{\mybox}
\settowidth{\foo}{\usebox{\mybox}}
\noindent\rule{\foo}{1pt}
\vspace{10pt}
\noindent\begin{tikzpicture}
\draw (0,0) rectangle (\foo,4);
\end{tikzpicture}
\begin{tcolorbox}[width=\foo]
\blindtext[1]
\end{tcolorbox}
\end{document}