将长表标题放入 marginpar 中,并保持与 caption 包的兼容性

将长表标题放入 marginpar 中,并保持与 caption 包的兼容性

经过一番研究,我找到了一种方法,将长表 (ltablex) 的标题放入左边缘,与表格顶部对齐。因此,我采用了此解决方案stackexchange.com:marginpar 中的长表标题

这里是 MWE:

\documentclass[a4paper]{report}
\usepackage{longtable,caption,xcolor,lipsum}
% alter \LT@makecaption to move caption in top-left marginpar
\makeatletter
\def\LT@makecaption#1#2#3{%
    \noalign{\vspace*{-0.4cm} % vertical adjustment to compensate for missing top caption
        \smash{
            \hbox{
                \llap{
                    \parbox[t]{\marginparwidth}
                    {\vspace{0.5cm}\raggedleft#1{#2: }#3}
                    \kern\marginparsep
                }
                \kern\textwidth\
            }
        }
    }
}
\makeatother

\begin{document}

\captionsetup{
    labelfont={small,color={red}},
    textfont={small,it}
    }   
\lipsum[8]  
    \begin{longtable}{rr}
        \caption{This is a caption}\\
        Head1 & Head2 \\
        \endhead
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2 \\
    \end{longtable}
\lipsum[7]  

\end{document}

问题:此解决方案破坏了与 caption 包的兼容性:尽管 \captionsetup 在没有重新定义的情况下可以完美地工作,但之后就无法工作了。

问题: 有没有办法重写此代码

  • 创建/维护与 caption 包的兼容性,或
  • 将标题的字体颜色/字体样式硬编码到代码中(如果没有其他解决方案)
  • 或者使用另一个包的替代方法/解决方案

先前的研究: 我尝试了 floatrow、sidecap 和 caption 包,以及 tufte-latex 和 memoir 类,以及非官方的tufte 侧注包

标题包 [2011/11/12] 的文档确实建议将标题类型和编号移到左边距(第 27f 页):

\DeclareCaptionFormat{llap}{\llap{#1#2}#3\par}
\captionsetup{format=llap,labelsep=quad,singlelinecheck=no}

但是,我无法(缺乏知识)修改此代码片段或其他包以实现类似的结果。 tufte sidenotes 包看起来特别有希望,但我不知道如何修改包代码。

答案1

您可能需要在页边距中使用仅带有标签的标题,或者将整个标题作为页边距段落。我给出了一种同时执行这两种操作的方法:

\documentclass[a4paper]{report}
\usepackage{longtable,caption,xcolor,lipsum}

\usepackage{booktabs,ragged2e}
\DeclareCaptionFormat{marginlbl}{\llap{#1#2}#3\vskip-2\baselineskip}
\DeclareCaptionFormat{margin}{\hskip\dimexpr-\marginparwidth-\marginparsep\relax \setlength\fboxsep{0pt} \raisebox{\dimexpr-\height+0.45\baselineskip\relax}[0pt][0pt] {\parbox[0pt]{\marginparwidth}{\RaggedRight#1#2#3}} \vskip-1.5\baselineskip}

\captionsetup{
    labelfont={small,color={red}},
    textfont={small,it},singlelinecheck=no, format = margin
    }

\begin{document}
\lipsum[8]
    \begin{longtable}{rr}
        \caption{This is a very, very, very long caption}\\
        Head1 & Head2 \\
\midrule
        \endhead
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2
    \end{longtable}
\lipsum[7]

    \begin{longtable}{rr}\captionsetup{format=marginlbl}
        \caption{This is a shorter caption}\\
        Head1 & Head2 \\
\midrule
        \endhead
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2 \\
        col1 & col2
    \end{longtable}
\end{document} 

在此处输入图片描述

相关内容