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

在R Markdown生成PDF时使用units包失效,该如何正确使用?

在R Markdown(PDF输出)中使用units包的解决方案

当然可以在R Markdown的PDF输出里使用units包!你遇到的问题是因为units对象的默认输出格式和LaTeX的排版逻辑不兼容,只需要对units对象做一点格式转换就能解决。

核心问题

当你直接输出len * wid时,它返回的是一个带有单位属性的对象,默认打印时会显示类似50 mm^2的文本,但LaTeX不会自动把^2解析为上标,而且有时候会因为格式问题导致渲染失败。

解决方法

我们需要把units对象转换为LaTeX能识别的字符串格式,这里有两种常用方式:

方法1:自定义函数手动格式化LaTeX友好字符串

可以写一个小函数,把units对象拆分为数值和单位,再将单位的上标转换为LaTeX支持的语法:

---
title: "Units in R Markdown"
output: pdf_document
---
knitr::opts_chunk$set(echo = TRUE)
library(units)
# 自定义转换函数,适配LaTeX上标
unit_to_latex <- function(x) {
  num_val <- as.numeric(x)
  unit_text <- format_units(x)
  # 把^替换为LaTeX上标语法
  unit_text <- gsub("\\^(\\d+)", "$^\\1$", unit_text)
  paste0(num_val, " ", unit_text)
}
len <- set_units(5, mm)
wid <- set_units(10, mm)
area <- len * wid

行内代码:矩形的面积是r unit_to_latex(area)。

cat(paste("The area of the rectangle is", unit_to_latex(area)))

方法2:启用units包的LaTeX输出模式

units包自带了针对LaTeX的输出配置,只需要设置全局选项,就能让单位自动输出为LaTeX兼容格式:

---
title: "Units in R Markdown"
output: pdf_document
---
knitr::opts_chunk$set(echo = TRUE)
library(units)
# 开启LaTeX兼容的单位输出模式
units_options(sep = "~", parse = TRUE)
len <- set_units(5, mm)
wid <- set_units(10, mm)
area <- len * wid

行内代码:矩形的面积是r area。

cat(paste("The area of the rectangle is", area))

效果说明

用上面任意一种方法,渲染后的PDF都会正确显示:

行内代码:矩形的面积是50 mm$^2$。
The area of the rectangle is 50 mm$^2$

其中mm$^2$会被LaTeX解析为带平方上标的毫米单位,最终呈现你预期的50mm²样式。

注意事项

  • 两种方法都能自动处理复杂单位(比如m/s^2这类带多层上标的单位);
  • 使用parse = TRUE选项时,代码块输出建议用cat(),确保knitr能正确识别LaTeX语法;
  • 若遇到极特殊的单位格式,可微调自定义函数的正则规则,适配需求。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:25:00