![将长表标题放入 marginpar 中,并保持与 caption 包的兼容性](https://linux22.com/image/297304/%E5%B0%86%E9%95%BF%E8%A1%A8%E6%A0%87%E9%A2%98%E6%94%BE%E5%85%A5%20marginpar%20%E4%B8%AD%EF%BC%8C%E5%B9%B6%E4%BF%9D%E6%8C%81%E4%B8%8E%20caption%20%E5%8C%85%E7%9A%84%E5%85%BC%E5%AE%B9%E6%80%A7.png)
经过一番研究,我找到了一种方法,将长表 (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}