テーブルの幅が狭くなると、longtblr のキャプションも小さくなります

テーブルの幅が狭くなると、longtblr のキャプションも小さくなります

「再定義された TblrTemplates」を使用する際に、いくつか小さな問題が見つかりました。この再定義されたテンプレートは、longtblr キャプションを左揃えにするために使用されました。

表のキャプションが十分に長い場合、書式設定により次の行にキャプションが垂れ下がる必要があります。表の幅がテキストの幅と等しい場合、表のキャプションは次の行に完全に垂れ下がります。問題は、表の幅がテキストの幅と等しくない場合に発生しました。ご覧のとおり、表の幅が狭くなるとキャプションも小さくなります。

キャプションパッケージを使った解決策を試してみましたが、

\captionsetup{width=1\textwidth}

しかし、longtblr は独自の環境で動作していたため、動作しませんでした。

調査をしていくつかの答えを見つけましたこここの解決策はキャプションの幅の問題を解決しているように見えますが、何らかの理由でキャプションがハングしなくなりました。また、この回答ここキャプションがぶら下がる問題は解決しましたが、キャプションも縮小されました。この 2 つの方法を組み合わせると失敗しました。

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}

ここに画像の説明を入力してください

関連情報