dapengde 今天用 R 的 bookdown 包重新编译一本书稿,得到的 pdf 文件里出现交叉引用的错误。引用一个 example 环境,应该出现数字编号,结果出现了问号,说是“标签丢失”。 两个月前编译还是好好的啊,啥都没改,怎么回事? 看 tex 文件,引用的地方是 \ref{ex:ex3-3},而被引用的环境,居然是 {exm:ex3-3}{}{\label{exm:ex3-3}! ex 后面怎么凭空出来个m? 折腾了半天都没弄清楚,后来突然想起来去看看 bookdown 的文档,是不是这厮悄悄升级了? <https://bookdown.org/yihui/bookdown/markdown-extensions-by-bookdown.html#theorems> 果然!定理环境里多出一个 exercise 环境。而原来的 example 环境的简称,就由 ex 变成了 exm...... 感觉被坑了。好在我立刻跳了出来,拍拍土继续走。
yihui dapengde 我一直说用 bookdown 要优先考虑 HTML 输出,PDF 要留到真真的最后一步。如果你输出 HTML 的话,你会看见一个警告信息,告诉你 ex: 变成了 exm:;而且我对 HTML 输出也做了向后兼容处理:https://github.com/rstudio/bookdown/commit/68ae3a54de 不过我确实忘了对 LaTeX 输出做同样的兼容处理。 改成三个字母一方面是由于强迫症,所有其它标签前缀都是三个字母;另一方面是因为引入了 exercise 环境,它也是 ex 开头,我用了 exr 作为前缀,然后觉得它跟 example 的 ex 前缀对比看起来很不协调,所以把后者改了。 以后出现问题可以先看新闻联播:https://github.com/rstudio/bookdown/releases 我一般做这种更改都会留出相当长时间的兼容期(比如一两年),最后才彻底更改。这次确实是我忘了处理 LaTeX。
dapengde yihui 新闻联播这个习惯不错,以后养成习惯才好。 这个小坑估计没几个人遇见吧?bookdown 用户,恰好升级前后编译同一个文件,恰好用了 example 环境,恰好只输出了 pdf……一求交集,发现只有老哥我一个…… 所以专门坑的就是我。 说到pdf,不知咋的,我就是偏爱一些,觉得就是比 html 正经一些。pdf 感觉是书店书架上整齐排列装帧精美的书籍,html则像贴在电线杆上的小广告。
yihui dapengde 嗯,基本上坑的就是你。HTML 排版质量当然不如 PDF,我的意思是先专注完成内容(HTML 擅长预览),把排版留到最后一步(LaTeX 擅长排版)。如果总是一遍遍看最终 PDF 版式,写作会很容易分心:PDF 不仅编译时间长一些,而且容易出现各种逼死强迫症的细微问题,比如好不容易把一幅图摁在了一个位置,等加了两个段落之后发现图又飘走了。 等你们再多写两本书可能体会会更深一点。