You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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参数:第一个chunktable_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:50:48