我目前的测试涉及了三个问题:字体,参考文献,冷门包。为了避免混乱,我分开描述。
在未来相当长的一段时间里,tinytex 会跟 MiKTeX,TeXLive 等发行版并驾齐驱吧。"tinytex" 一词现在既指 R 包又指 tinytex 发行版,我觉得有时候表述起来容易混淆。如果其中一个改个名字,例如叫 tinytexr, 会不会更有利于减少交流里的误会?不然别人说她安装了 tinytex 后如何如何,你还得问,是 R 包还是发行版?有点小纠结。
1. 字体
yufree 谢谢。但是我在 chemistry 模版里添加了 \usepackage{lmodern},仍然没解决,故障依旧。我用另一个方案解决了,见下文。无心插柳,你这个办法解决了另外一个问题: article_mdpi 模板现在也在 tinytex 下通过了!原先也是字体问题。
yihui 可能是我对这个字体问题的理解有误,描述不当。下面是详情。我刚才已经在这里找到了解决方案(哦耶!),是手动安装两个包:
tlmgr_install('collection-fontsrecommended')
tlmgr_install('collection-latexrecommended')
为了对别人有用,我把对应的故障现象整理如下,全部是在 Ubuntu 16.04 下最新版的 RStudio 里操作,tinytex 包最新版。
- 先用
bookdownplus::bookdownplus('discussion')
生成了一套 bookdown 需要的文件。
- 然后按 ctrl + shift + b 进行编译,pdf 未能生成,RStudio 的 Build 面板显示信息如下:
==> rmarkdown::render_site(output_format = 'bookdown::pdf_book', encoding = 'UTF-8')
|............. | 20%
ordinary text without R code
|.......................... | 40%
label: fig1 (with options)
List of 4
$ fig.cap : chr "caption"
$ out.width: chr "80%"
$ fig.align: chr "center"
$ echo : logi FALSE
processing file: discussion.Rmd
|....................................... | 60%
ordinary text without R code
|.................................................... | 80%
label: tab1 (with options)
List of 2
$ tidy: logi FALSE
$ echo: logi FALSE
|.................................................................| 100%
inline R code fragments
/usr/lib/rstudio/bin/pandoc/pandoc +RTS -K512m -RTS discussion.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output discussion.tex --table-of-contents --toc-depth 3 --template tex/template_discussion.tex --number-sections --highlight-style tango --latex-engine pdflatex --natbib --variable tables=yes --standalone
output file: discussion.knit.md
tlmgr search --file --global '/ecrm1000[.](tfm|afm|mf|otf)'
Trying to automatically install missing LaTeX packages...
tlmgr install ec
tlmgr: package repository http://mirror.kumi.systems/ctan/systems/texlive/tlnet (verified)
tlmgr install: package already present: ec
tlmgr path add
tlmgr search --file --global '/ecrm1000[.](tfm|afm|mf|otf)'
Output created: _book/discussion.pdf
Error in tools::file_path_as_absolute(output_file) :
file '_book/discussion.pdf' does not exist
Calls: <Anonymous> ... render_book -> render_cur_session -> <Anonymous> -> <Anonymous>
In addition: Warning message:
In file.rename(output, output2) :
cannot rename file 'discussion.pdf' to '_book/discussion.pdf', reason 'No such file or directory'
Please delete discussion.Rmd after you finish debugging the error.
Execution halted
Exited with status 1.
- 紧接着,我对上一步生成的 discussion.tex 运行
tinytex::latexmk()
来编译:
> latexmk('discussion.tex')
tlmgr search --file --global '/ecrm1000[.](tfm|afm|mf|otf)'
Trying to automatically install missing LaTeX packages...
tlmgr install ec
tlmgr: package repository http://mirror.kumi.systems/ctan/systems/texlive/tlnet (verified)
tlmgr install: package already present: ec
tlmgr path add
tlmgr search --file --global '/ecrm1000[.](tfm|afm|mf|otf)'
就停到这里了。 log文件我贴在了这里。此外还生成了个 missfont.log,内容是:
mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 ecrm1000
上述问题用前面说的安装两个包就解决了。
而 discussion 模板在 Windows 7 + CTeX(没有安装 tinytex R 包和发行版)是可以顺利编译通过的。
2. 参考文献出现问号
yihui 大概是我没说清,或者说得太分散,让你误会了。这里汇总一下。我是在 Windows 7 和 Ubuntu 16.04 下分别用 RStuido 新建了一个 bookdown 项目,在自动出现的 mini 模板上,通过修改 index.Rmd 里 yaml 的 bibliography: [book.bib]
这一行的声明来测试。我修改的只是这个yaml声明,而不是参考文献库 'book.bib'文件的文件名。我编译是在 bookdown 环境下用 ctrl+shift+b,不是用 tinytex::latexmk()
或别的。
- 如果写成
bibliography: [book]
,那么无论 Windows+CTeX 还是 Ubuntu+TinyTex,都能生成正确的 pdf ,但不能生成其他格式。可能是因为 pandoc 认为 'book' 跟'book.bib'是不同的文件。 错误信息如下:
pandoc-citeproc: Could not find book
CallStack (from HasCallStack):
error, called at src/Text/CSL/Pandoc.hs:224:39 in pandoc-citeproc-0.10.4-6rooHIpno7nIk4QQSmQ8di:Text.CSL.Pandoc
pandoc: Error running filter /usr/lib/rstudio/bin/pandoc/pandoc-citeproc
Filter returned error status 1
Error: pandoc document conversion failed with error 83
Please delete bdtest.Rmd after you finish debugging the error.
Execution halted
Exited with status 1.
- 如果写成
bibliography: [book.bib]
,那么 Ubuntu 下无论 pdf 还是其他格式,都没有任何问题,但是 Windows + CTeX 会找不到参考文献库,因为 CTeX 画蛇添足地把 'book.bib' 改成了 'book.bib.bib'。
我的意思是想提交这个关于 bookdown/CTeX 的 bug:Windows + CTeX 的用户,用 RStudio 新建个 bookdown 项目,编译出来的 pdf 里参考文献问号。这个问题跟 TinyTex 无关。当然,改用 TinyTex 能解决,但是我说的是 CTeX 用户啊。这个锅应该让 CTeX 来背,但是我不知道上哪儿去反馈这个问题,所以想问问能不能在 bookdown 层面解决。这个问题在今年上半年是不存在的,肯定是后来 MiKTeX 还是 Pandoc 还是 bookdown 哪次升级造成的。
所以我觉得我应该完全摒弃 CTeX,改用 TinyTex。之所以没改,是因为 bookdownplus 的几个模板目前只能在 CTeX 才能通过,TinyTex 无法通过。这就涉及下面的问题。
3. 象棋和围棋包
我原以为 LaTeX 不同的发行版在宏包库上是一致的呢!既然这俩包在 TeXLive 上不存在,估计没几个人用,我懒得折腾手动安装的事儿了,直接无视得了。
看来,LaTeX 的世界太混乱了。希望 TinyTeX 的出现,能最终实现车同轨书同文。当然,到达这个目标之前,可能会加剧混乱……