使用bookdown生成Word文档时,如何正确引用表格并隐藏锚点?
解决bookdown生成Word文档时的表格引用问题
一、别手动往标题加锚点,用正确的代码块参数
在bookdown里生成带可引用ID的表格,根本不用手动把{#xxx}塞标题里。直接给代码块加label和tab.cap参数就行——注意表格用tab.cap,不是给图用的fig.cap:
knitr::kable( mtcars[1:5, ], tab.cap = "这是我的第二个表格", label = "mysecondtable2" )
之后你用\@ref(tab:mysecondtable2)就能正常引用,生成的Word里标题不会显示锚点,引用也能正确关联。
二、用Lua过滤器清掉标题里的锚点(如果已经加了)
要是你已经把锚点写到标题里了,用Lua过滤器能自动删掉它,步骤很简单:
- 新建个
remove-anchor.lua文件,把下面代码贴进去:
function Para(el) for i, inline in ipairs(el.content) do if inline.t == "Str" and string.match(inline.text, "{#.*}") then table.remove(el.content, i) -- 删掉锚点前面可能多余的空格 if i > 1 and el.content[i-1].t == "Space" then table.remove(el.content, i-1) end return el end end return el end
- 在你的项目配置里加这个过滤器——比如在
index.Rmd的YAML头部这么写:
output: bookdown::word_document2: pandoc_args: ["--lua-filter=remove-anchor.lua"]
重新生成Word文档,标题里的{#mysecondtable2}就没了,但锚点的引用功能还能正常用。
三、修复链接指向错误的问题
你之前写的[Table \@ref(tab:mysecondtable)](#mysecondtable)不好使,是因为ID不匹配。你代码块里的label是mysecondtable2,那引用就得对应写成[Table \@ref(tab:mysecondtable2)](#mysecondtable2),这样生成的链接才会准确指向目标表格,不会只跳标题还丢末尾的2。
内容的提问来源于stack exchange,提问作者drmariod
相关产品推荐
相关产品推荐

