考虑下面的 MWE。如果我\usepackage{floatrow}
注释掉,表格longtable
就不会水平居中。如果我注释掉,\usepackage{floatrow}
表格就会正确水平居中。
我怎样才能让这个代码片段工作(同时使用floatrow
和 居中longtable
)?
致谢:景观建设(我为 MWE 简化了):Steven B. Segletes 在此回答。
以下 MWE 中没有 usepackage floatrow (正确):
在 MWE 下方使用 usepackage floatrow (不再居中):
梅威瑟:
\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{pdflscape}
\usepackage{afterpage}
\usepackage{setspace}
\usepackage[a4paper]{geometry}
% >> 'PROBLEM' package
\usepackage{floatrow}
% << 'PROBLEM' package
\begin{document}
Document is portrait
\afterpage{%
\clearpage% Flush earlier floats (otherwise order might not be correct)
\newgeometry{left=1cm, right=1cm,top=1cm,bottom=1cm}
\begin{landscape}% Landscape page
\pagestyle{empty}
\centering % Center table
\vspace{0pt}
\begin{singlespacing}
\begin{longtable}{rr}
\caption{Table is landscape.}
\tabularnewline
\textbf{Col1} & \textbf{Col2}\tabularnewline
\midrule
\endfirsthead
\caption{Caption (Continued)}\tabularnewline
\textbf{Col1} & \textbf{Col2}\tabularnewline
\midrule
\endhead
\bottomrule
\multicolumn{2}{r}{Cont}
\endfoot
\bottomrule
\endlastfoot
A & B \tabularnewline
C & D \tabularnewline
\end{longtable}
\end{singlespacing}
\end{landscape}
\clearpage% Flush page
}
\restoregeometry
\end{document}
答案1
由于某些奇怪的原因floatrow
设置\LTleft
和\LTright
0pt 破坏了 longtable 的默认定位,你可以将它们设置回去,或者更简单地使用
\begin{longtable}[c]{rr}
强制长桌居中。
floatrow
手册里提到过这一点
longtable 的对齐设置。floatrow 将一些表格布局设置扩展到 longtable 环境,因此您可以在 \DeclareMarginSet 设置中设置 \LTleft 和 \LTright 参数。例如,居中选项定义如下:
\DeclareMarginSet{centering}{\setfloatmargins{\hfill}{\hfill}% \LTleft=\fill \LTright=\fill}
答案2
这可能是解决方案:
header-includes:
- \usepackage{floatrow}
- \floatsetup[longtable]{margins=centering}
更新
包“float”与 kable 和 kableExtra 一起使用。
当我们需要将图形的标题放在顶部时,我发现的唯一解决方案是使用“floatrow”包。
由于“float”和“floatrow”不兼容,因此需要在“floatrow”中添加一些额外的配置,以便使用 rstudio、rmarkdown 和 knitr 通过 kable 和 kableExtra 生成的表格外观相同。
header-includes:
- \usepackage{floatrow}
- \floatsetup[figure]{capposition=top} % Caption figure top.
- \floatsetup[table]{capposition=top} % Caption table top.
- \floatplacement{figure}{H} % Figure position according to the code flow.
- \floatplacement{table}{H} % Table position according to the code flow.
- \floatsetup[longtable]{margins=centering} % Longtable tables centered.