如何在R Markdown中精准定位PDF输出中的表格?
问题
我正在用R Markdown创建PDF文档,没法把表格固定到指定段落的后面。我知道fig.pos="H"可以用来让表格在PDF里的位置和R Markdown中的位置完全对应,但试了之后没效果。
我的表格生成代码:
```{r table_1, message=FALSE, warning=FALSE, echo=FALSE, include=FALSE, fig.pos="H", fig.cap="test", out.extra=''} library(magrittr) library(tidyverse) library(kableExtra) library(readxl) library(modelsummary) library(scales) tab <- matrix(c("1", "var1", "Yes","No", "2", "var2", "Yes","No", "3", "var3", "Yes","Yes", "4", "var4", "Yes","Yes", "5", "var5", "Yes","Yes" ), ncol=4, byrow=TRUE) colnames(tab) <- c('#','column2','column3','column4') rownames(tab) <- NULL tab <- as.table(tab) table_1_output <- kbl(tab, booktabs = T, linesep = "", row.names = 0, caption = "List of variables.") %>% kable_styling(font_size = 8)
table_1_output
R Markdown前置内容: ```yaml --- title: '**title**' author: - name_author_1: email: email institute: name1 correspondence: yes - name: name_author_2 institute: name2 - name: name_author_3 institute: name2 - name: name_author_4 institute: name3 - name: name_author_5 institute: name3 date: "14 Nov 2022" bibliography: ref_file.bib bib-humanities: true output: pdf_document: includes: in_header: header.tex number_sections: yes toc: no pandoc_args: - --lua-filter=scholarly-metadata.lua - --lua-filter=author-info-blocks.lua word_document: toc: no pandoc_args: - --lua-filter=scholarly-metadata.lua - --lua-filter=author-info-blocks.lua html_document: toc: no df_print: paged header-includes: - | ```{=latex} \makeatletter \DeclareRobustCommand\and{% % \begin{tabular} \end{tabular}% \hskip -.5em \@plus.17fil% \begin{tabular}[t]{c}}% % \end{tabular} ``` institute: - name1: name1 - name2: name2 - name3: name3 ---
header.tex内容:
\usepackage{amsmath} \usepackage{pdflscape} \usepackage{float} \newcommand{\blandscape}{\begin{landscape}} \newcommand{\elandscape}{\end{landscape}} \makeatletter \patchcmd{\@maketitle}{\LARGE}{\Large}{\typeout{OK 1}}{\typeout{Failed 1}}
解决方案
- 给表格单独设置固定位置参数:
fig.pos="H"是给ggplot等图形用的,kable生成的表格需要在kable_styling里添加position="H"参数,这才是控制表格LaTeX浮动位置的正确方式。修改表格生成代码:table_1_output <- kbl(tab, booktabs = T, linesep = "", row.names = 0, caption = "List of variables.") %>% kable_styling(font_size = 8, position = "H") - 清理无效的chunk参数:第一个chunk
table_1设置了include=FALSE,里面的fig.pos="H"、fig.cap都是无效的,直接删除;第二个chunktable_1_final里的fig.cap和表格自带的caption重复,也可以删除,避免冲突。 - 确认float包已加载:你的
header.tex已经引入了float包,H选项依赖这个包,这一步没问题。 - 处理段落长度导致的浮动:如果表格前的段落过短,LaTeX可能仍会调整位置,可以在段落末尾添加
\vspace{0pt}强制LaTeX不自动浮动,或用\pagebreak手动分页(优先用position="H"解决)。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

