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

Travis上Bookdown LaTeX编译失败:\includegraphics用px单位报错

解决Bookdown + XeLaTeX编译PDF时的"非法度量单位"错误

问题分析

你遇到的这个错误(! Illegal unit of measure (pt inserted))本质是XeLaTeX不支持将px像素作为图片宽度的单位——虽然PDFLaTeX可能在某些环境下能兼容px,但XeLaTeX(Bookdown默认用于编译UTF-8文档的引擎)对LaTeX原生长度单位的要求更严格。px是屏幕显示单位,并非LaTeX原生支持的长度单位(LaTeX原生支持的是pt、cm、mm、in、\textwidth这类相对/绝对单位)。

解决方案

这里有两种靠谱的解决思路,推荐优先用第一种:

1. 改用LaTeX原生长度单位(最稳妥)

直接把图片的out.width参数从像素单位换成LaTeX支持的单位,推荐使用相对单位(比如\textwidth的比例)来保证PDF在不同页面尺寸下的自适应:

  • 比如把out.width="700px"改成out.width="0.8\textwidth"(表示宽度占页面文本宽度的80%)
  • 如果一定要用固定宽度,也可以换算成厘米:1px≈0.026458cm,700px≈18.52cm,所以可以写out.width="18.5cm"

修改后,你的Bookdown代码块应该类似:

![ pasta image ](images/pasta1.jpg){width=0.8\textwidth}

或者用R代码调用的方式:

knitr::include_graphics("images/pasta1.jpg", out.width = "0.8\\textwidth")

(注意在R代码里需要转义反斜杠,写成\\textwidth)

2. 在LaTeX预定义中添加px单位支持(不推荐,仅当必须用px时)

如果你一定要保留px单位,可以在Bookdown的preamble.tex文件中添加以下代码,手动定义px对应的LaTeX长度:

\makeatletter
% 定义1px = 1/96英寸(对应屏幕96dpi的标准),1英寸=2.54cm
\def\px@unit{0.026458cm}
\newlength{\px}
\setlength{\px}{\px@unit}
% 让graphicx包识别px单位
\DeclareGraphicsOption{width}{\setbox\@tempboxa\hbox{\includegraphics{##1}}\resizebox{#1\px}{!}{\box\@tempboxa}}
\makeatother

不过这种方法需要额外配置,而且px作为屏幕单位在PDF中并没有实际意义,所以还是优先推荐第一种方案。

验证你的MWE

把你提供的最小示例中的px单位换成LaTeX原生单位,修改后的代码可以正常编译:

\documentclass[12pt,a4paper]{article}
\usepackage{graphicx}
\begin{document}
\noindent\includegraphics[width=3cm]{example-image-a}\qquad
\includegraphics[width=3cm]{example-image-golden}\qquad
\includegraphics[width=1.32cm]{example-grid-100x100pt} % 50px ≈ 1.32cm
\includegraphics[width=0.8cm]{example-grid-100x100pt} % 30px ≈ 0.8cm
\end{document}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:20