包 tabularray 和 side caption

包 tabularray 和 side caption

我正在使用非常好的软件包tabularray,我想将表格的标题放在侧边距上(如 Tufte-Style),但我没有找到办法。在文档中(4.2.3手动的)我刚刚找到了一种自定义字体和其他选项的方法,使用以下命令:

\DefTblrTemplate{caption-tag}{default}{Table\hspace{0.25em}\thetable}
\DefTblrTemplate{caption-sep}{default}{:\enskip}
\DefTblrTemplate{caption-text}{default}{\InsertTblrText{caption}}

但这并不影响标题的位置。

这里有一个非常 MWE:

\documentclass[12pt, mpinclude]{scrbook}

\usepackage{tabularray}

\begin{document}

\DefTblrTemplate{caption-tag}{default}{Tabela\hspace{0.25em}\thetable}
\DefTblrTemplate{caption-sep}{default}{-\enskip}
\DefTblrTemplate{caption-text}{default}{\InsertTblrText{caption}}
\begin{longtblr}[caption={one table}]{colspec = {X[c]X[c]X[c]}}
1 &  2& 3 &\\
4 & 5& 6\\
7 & 8 & 9 \\
\end{longtblr}
\end{document}

编辑:我提到 Tufte 风格只是因为我试图在文档中重现这种风格,并且它使用了边距中的所有标题,但我没有使用这个特定的类。

答案1

一个简单的解决方案是完全删除标准标题,并且在.\captionof中使用是 soma-script 中的标准命令,否则您必须使用像 . 这样的包。\marginpar\captionofcaption

\documentclass[12pt, mpinclude]{scrbook}

\usepackage{tabularray}

\setcapindent{0pt}

\begin{document}

\DefTblrTemplate{caption-tag}{default}{}
\DefTblrTemplate{caption-sep}{default}{}
\DefTblrTemplate{caption-text}{default}{}
\renewcommand{\tablename}{Tabela}

\marginpar{\captionof{table}{\null\\one table}}
\begin{longtblr}[caption={one table}]{colspec = {X[c]X[c]X[c]}}
1 &  2& 3 &\\
4 & 5& 6\\
7 & 8 & 9 \\
\end{longtblr}
\end{document}

在此处输入图片描述

答案2

我找到了解决方案!您需要重新定义/创建模板命令。我使用下面的代码重新定义了默认模板。

\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] [c] { \box_use:N \l__tblr_caption_box }
\par
}
}

我重新定义了default风格如下:

 \DefTblrTemplate { caption } { default }
{
    \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
        }
        {
            \marginnote { \box_use:N \l__tblr_caption_box }
            \par
        }
}

在这里我改变了这些位置:

\centering
    \makebox [\hsize] [c] { \box_use:N \l__tblr_caption_box }
    \par

至以下几行:

\marginnote { \box_use:N \l__tblr_caption_box }
            \par

现在标题在边缘。不幸的是,该\marginpar命令不起作用,如果您尝试使用它,您将收到错误:! LaTeX Error: Not in outer par mode.因此,您需要使用该包marginnote来获取正确的命令。

完整代码:

\documentclass[12pt, mpinclude]{scrbook}

\usepackage{tabularray}
\usepackage{marginnote}
\begin{document}

\ExplSyntaxOn
\DefTblrTemplate { caption } { default }
{
    \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
        }
        {
            \marginnote { \box_use:N \l__tblr_caption_box }
            \par
        }
}
\ExplSyntaxOff

\DefTblrTemplate{caption-tag}{default}{Tabela\hspace{0.25em}\thetable}
\DefTblrTemplate{caption-sep}{default}{-\enskip}
\DefTblrTemplate{caption-text}{default}{\InsertTblrText{caption}}
\begin{longtblr}[caption={one table}]{colspec = {X[c]X[c]X[c]}}
    1 &  2& 3 &\\
    4 & 5& 6\\
    7 & 8 & 9 \\
\end{longtblr}
\end{document}

输出:

在此处输入图片描述

相关内容