
我在使用“Redefine TblrTemplates”時發現了一些小問題。這個重新定義的範本用於將 longtblr 標題左對齊。
如果表格的標題夠長,我的格式要求它掛在下一行。如果表格寬度等於文字寬度,則表格標題將完美懸掛在下一行。當表格寬度不等於文字寬度時會出現問題。正如您所看到的,標題隨著表格寬度的減小而縮小。
我確實嘗試了帶有標題包的解決方案,
\captionsetup{width=1\textwidth}
但它不起作用,因為 longtblr 在它自己的環境中運行。
我做了一些研究並發現了一些答案這裡。該解決方案似乎解決了標題寬度的問題,但由於某種原因,標題不再懸掛。另外,這個答案這裡解決了標題懸掛的問題,但也縮小了標題。當我嘗試將這兩種方法結合起來時,我失敗了。
我的程式設計知識不足,無法修改 Tabularray 原始碼。為了實現掛在下一行並具有文字寬度的表格標題,我非常需要幫助。任何建議或答案表示讚賞。
\documentclass{article}
\usepackage{tabularray}
\usepackage[singlelinecheck=off]{caption}
\captionsetup[table]{format=hang}
% Redefined TblrTemplates
\ExplSyntaxOn
\DefTblrTemplate{caption}{normal}{
\hbox_set:Nn \l__tblr_caption_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
\UseTblrTemplate{caption-text}{default}
}
\dim_compare:nNnTF{\box_wd:N \l__tblr_caption_box}>{\hsize}{
\UseTblrAlign{caption}
\UseTblrIndent{caption}
\hbox_set:Nn \l__tblr_caption_left_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
}
\hangindent=\box_wd:N \l__tblr_caption_left_box
\hangafter=1
\UseTblrHang{caption}
\leavevmode
\hbox_unpack:N \l__tblr_caption_box
\par
}{
\centering
\makebox[\hsize][l]{\box_use:N \l__tblr_caption_box}
\par
}}
\DefTblrTemplate{capcont}{normal}{
\hbox_set:Nn \l__tblr_caption_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
\UseTblrTemplate{caption-text}{default}
\space
\UseTblrTemplate{conthead-text}{default}
}
\dim_compare:nNnTF{\box_wd:N \l__tblr_caption_box}>{\hsize}{
\UseTblrAlign{capcont}
\UseTblrIndent{capcont}
\hbox_set:Nn \l__tblr_caption_left_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
}
\hangindent=\box_wd:N \l__tblr_caption_left_box
\hangafter=1
\UseTblrHang{capcont}
\leavevmode
\hbox_unpack:N \l__tblr_caption_box
\par
}{
\centering
\makebox[\hsize][l]{\box_use:N \l__tblr_caption_box}
\par
}}
\SetTblrTemplate{caption}{normal}
\SetTblrTemplate{capcont}{normal}
\ExplSyntaxOff
\begin{document}
\begin{table}[h]
\caption{This is a normal table caption using a table environment. If the table's caption is long enough, the formatting requires it to hang on the next line}
\centering
\begin{tblr}{
width=0.5\linewidth,
colspec={XXX},
hlines, vlines
}
Head & Head & Head \\
Head & Data & Data \\
\end{tblr}
\end{table}
\begin{longtblr}[
caption={This is a long table that uses "Redefined TblrTemplates" suggested by @samcarter\_is\_at\_topanswers.xyz. The table caption was hanging perfectly on the next line with no problems}
]{
colspec={XXX},
hlines, vlines,
rowhead=1
}
Head & Head & Head \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
\end{longtblr}
\begin{longtblr}[
caption={The problem occurred when the width of the table didn't equal the text width. As you can see, the caption shrunk as the table width decreased}
]{
colspec={*3{X[2cm]}},
hlines, vlines,
rowhead=1
}
Head & Head & Head \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
\end{longtblr}
\end{document}
答案1
這是保持表格居中的解決方案。根據https://tex.stackexchange.com/a/630675/113546
\documentclass{article}
\usepackage{tabularray}
\usepackage[singlelinecheck=off]{caption}
\captionsetup[table]{format=hang}
% Redefined TblrTemplates
\ExplSyntaxOn
\DefTblrTemplate{caption}{normal}{
\makebox[\hsize][c]{% see https://tex.stackexchange.com/a/630675/113546
\parbox{\textwidth}{%
\hbox_set:Nn \l__tblr_caption_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
\UseTblrTemplate{caption-text}{default}
}
\dim_compare:nNnTF{\box_wd:N \l__tblr_caption_box}>{\hsize}{
\UseTblrAlign{caption}
\UseTblrIndent{caption}
\hbox_set:Nn \l__tblr_caption_left_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
}
\hangindent=\box_wd:N \l__tblr_caption_left_box
\hangafter=1
\UseTblrHang{caption}
\leavevmode
\hbox_unpack:N \l__tblr_caption_box
\par
}{
\centering
\makebox[\hsize][l]{\box_use:N \l__tblr_caption_box}
\par
}}
}
}
\DefTblrTemplate{capcont}{normal}{
\makebox[\hsize][c]{% see https://tex.stackexchange.com/a/630675/113546
\parbox{\textwidth}{%
\hbox_set:Nn \l__tblr_caption_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
\UseTblrTemplate{caption-text}{default}
\space
\UseTblrTemplate{conthead-text}{default}
}
\dim_compare:nNnTF{\box_wd:N \l__tblr_caption_box}>{\hsize}{
\UseTblrAlign{capcont}
\UseTblrIndent{capcont}
\hbox_set:Nn \l__tblr_caption_left_box{
\UseTblrTemplate{caption-tag}{default}
\UseTblrTemplate{caption-sep}{default}
}
\hangindent=\box_wd:N \l__tblr_caption_left_box
\hangafter=1
\UseTblrHang{capcont}
\leavevmode
\hbox_unpack:N \l__tblr_caption_box
\par
}{
\centering
\makebox[\hsize][l]{\box_use:N \l__tblr_caption_box}
\par
}}
}
}
\SetTblrTemplate{caption}{normal}
\SetTblrTemplate{capcont}{normal}
\ExplSyntaxOff
\begin{document}
\begin{table}[h]
\caption{This is a normal table caption using a table environment. If the table's caption is long enough, the formatting requires it to hang on the next line}
\centering
\begin{tblr}{
width=0.5\linewidth,
colspec={XXX},
hlines, vlines
}
Head & Head & Head \\
Head & Data & Data \\
\end{tblr}
\end{table}
\begin{longtblr}[
caption={This is a long table that uses "Redefined TblrTemplates" suggested by @samcarter\_is\_at\_topanswers.xyz. The table caption was hanging perfectly on the next line with no problems}
]{
colspec={XXX},
hlines, vlines,
rowhead=1
}
Head & Head & Head \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
\end{longtblr}
\begin{longtblr}[
caption={The problem occurred when the width of the table didn't equal the text width. As you can see, the caption shrunk as the table width decreased}
]{
colspec={*3{X[2cm]}},
hlines, vlines,
rowhead=1
}
Head & Head & Head \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
Head & Data & Data \\ Head & Data & Data \\
\end{longtblr}
\end{document}