There is a way to align table captions to the left in "longtblr" environment?

Viewed 64

When using the caption package with the option "singleline check = off," the caption in a "table"+"tblr" environment seems to align left with no problem. In contrast, this option didn't affect when using "longtblr" environment.

I have tried using "table"+"longtble" environments together, but it doesn't work.

Is there a way to align table captions to the left in a "longtblr" environment? Any suggestion is appreciable. Thank you for your advice.

enter image description here

Here is the sample.

\documentclass{article}
\usepackage{tabularray}
\usepackage[singlelinecheck=off]{caption}

\begin{document}

\begin{table}[h]
    \caption{This is a normal table caption}
\begin{tblr}{
    width=1\linewidth,
    colspec={XXX},
    hlines, vlines
    }
Head & Head & Head \\
Head & Data & Data \\
\end{tblr}
\end{table}

\begin{longtblr}[
    caption={This is a long-table caption that should align left}
    ]{
    width=1\linewidth,
    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}

\end{document}

This is doesn't work

\begin{table}
    \caption{This is doesn't work}
\begin{longtblr}{
    width=1\linewidth,
    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}
\end{table}
3 Answers

You can redefine the TblrTemplates like this:

\documentclass{article}
\usepackage[singlelinecheck=off]{caption}

\usepackage{tabularray}

\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}
\begin{tblr}{
    width=1\linewidth,
    colspec={XXX},
    hlines, vlines
    }
Head & Head & Head \\
Head & Data & Data \\
\end{tblr}
\end{table}


\begin{longtblr}[
    caption={This is a long-table caption that should align left}
    ]{
    width=1\linewidth,
    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}

\end{document}

enter image description here

The simplest solution regarding longtblr is to add the following to your preamble

\DefTblrTemplate{caption}{default}{%
  \UseTblrTemplate{caption-tag}{default}%
  \UseTblrTemplate{caption-sep}{default}%
  \UseTblrTemplate{caption-text}{default}%
}
\DefTblrTemplate{capcont}{default}{%
  \UseTblrTemplate{caption-tag}{default}%
  \UseTblrTemplate{caption-sep}{default}%
  \UseTblrTemplate{caption-text}{default}
  \UseTblrTemplate{conthead-text}{default}%
}

but this affects all longtblr tables.

The tabularray has its own way to format parts of its tables. Particularly, longtblr operates on templates, which in turn can be applied to styles. If you want your tables to have different themes, you will need to defined custom templates and styles with custom themes.

Follow the suggestions of @samcarter_is_at_topanswers.xyz and @Celdor. I conducted additional research on the longtblr theme. Here is a sample of using the "longtblr" theme to align the table's caption to the left. Table 2 used a theme to align the caption to the left, and Table 3 without the theme caption will be center as default.

\documentclass{article}
\usepackage{tabularray}

% A long table theme with table captions aligned to the left with some modifications.
\NewTblrTheme{longtable1}{
    \DefTblrTemplate{conthead-text}{fancy}{ [Continued]}
        \SetTblrTemplate{conthead-text}{fancy}

    \DefTblrTemplate{contfoot-text}{fancy}{[Continue on next page]}
        \SetTblrTemplate{contfoot-text}{fancy}

    \DefTblrTemplate{caption}{default}{
        \UseTblrTemplate{caption-tag}{default}
        \UseTblrTemplate{caption-sep}{default}
        \UseTblrTemplate{caption-text}{default}
        }
    \DefTblrTemplate{capcont}{default}{
        \UseTblrTemplate{caption-tag}{default}
        \UseTblrTemplate{caption-sep}{default}
        \UseTblrTemplate{caption-text}{default}
        \UseTblrTemplate{conthead-text}{default}
        }}

\usepackage[singlelinecheck=off]{caption}

\begin{document}

\begin{table}[h]
    \caption{This is a normal table caption}
\begin{tblr}{
    width=1\linewidth,
    colspec={XXX},
    hlines, vlines
    }
Head & Head & Head \\
Head & Data & Data \\
\end{tblr}
\end{table}

\begin{longtblr}[
    theme=longtable1,
    caption={This is a long table that uses the ``longtblr'' theme to align the table's caption to the left}
    ]{
    width=1\linewidth,
    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={This is a long table without a ``longtblr'' theme.}
    ]{
    width=1\linewidth,
    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}

\end{document}

enter image description here

Related