召集壮士帮忙测试 TinyTeX
- 已编辑
dapengde 首先,用 tinytex::latexmk()
加 CTeX 编译不带 .bib 扩展名的参考文献是没有问题的,因为我对这个特殊情况作了特殊处理。唯一会出问题的情况是你用别的编辑器去编 PDF,这就不是我能控制的了,出了 R 的国界,我就无能为力了。
中国象棋包只能用户手工下载安装了,TeX Live 没有收录它,我不知道具体原因,但我的猜测是这个包的许可证不明确,MiKTeX 在许可证不明的情况下收录了它也是蛮大胆的。
围棋包为什么没收录我就彻底不知道了。
tcbx0700 和 ecrm1000 字体问题我用最新版的 tinytex R 包都可以自动匹配出 ec 包来啊。
TeX Live 没有收录的包应该是可以自己手工下载安装的,解压缩之后放在 file.path(tinytex:::texlive_root(), 'texmf-dist', 'tex', 'latex')
目录下。然后运行一下
texhash
updmap-sys
fmtutil-sys --all
我没尝试,只是猜测。
- 已编辑
我目前的测试涉及了三个问题:字体,参考文献,冷门包。为了避免混乱,我分开描述。
在未来相当长的一段时间里,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)'
上述问题用前面说的安装两个包就解决了。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'。
所以我觉得我应该完全摒弃 CTeX,改用 TinyTex。之所以没改,是因为 bookdownplus 的几个模板目前只能在 CTeX 才能通过,TinyTex 无法通过。这就涉及下面的问题。
3. 象棋和围棋包
我原以为 LaTeX 不同的发行版在宏包库上是一致的呢!既然这俩包在 TeXLive 上不存在,估计没几个人用,我懒得折腾手动安装的事儿了,直接无视得了。
看来,LaTeX 的世界太混乱了。希望 TinyTeX 的出现,能最终实现车同轨书同文。当然,到达这个目标之前,可能会加剧混乱…… - 紧接着,我对上一步生成的 discussion.tex 运行
- 已编辑
yihui 好了!我把 bookdownplus 的 29 个模板里的 26 个都修理了,可以在 Ubuntu + bookdown + TinyTeX 或 Windows + bookdown + TinyTex 下正常编译。甚至连五线谱和国际象棋的模板都通过了。来展示一下:
CTeX 下找不到参考文献库的问题我搁置不理了。剩下的 3 个模板,一个是中国象棋,一个是围棋,还有一个是设置了很多 Windows 下中文字体的模板,就留给 Windows 的用户独享吧。反正我自己也用不着。
TinyTeX 的测试算是告一段落。总结:这个包和发行版都非常爽!幸好有它,不然我是不会在 linux 测试 bookdownplus 的。
dapengde 关于名字问题,我在脚注中说明了:https://yihui.name/tinytex/ 小写表示 R 包,驼峰大写 TinyTeX 表示一套自定义的 TeX Live。我知道这会导致误会,但 R 包名我倾向于用短名。R 用户不需要跳出 tinytex 包,所有常见操作都可以在包内完成,不需去执行系统命令;非 R 用户也不需要知道 tinytex 包是个啥东东。
字体问题我查明原因了,是由于没有安装 metafont 和 mfware 两个包。yufree 如果你有空,可以再重装 TinyTeX(tinytex::install_tinytex()
)并测试一下 rticles 包中那两个模板在没有 lmodern 以及有安装 metafont/mfware 两个包的情况下是否能编译通过。
关于参考文献问题:我的意思是,不管你用哪个 LaTeX 套装,只要你用的是这里的 rmarkdown(这个会在不久的将来合并到正式版中):
devtools::install_github(('rstudio/rmarkdown@feature/tinytex'))
那么在 YAML 里使用带扩展名的 book.bib 应该都能通过。如果通不过,那么就是 tinytex R 包的缺陷,因为我是专门处理了 Windows 下的特殊情况的。
象棋围棋包最坏的情况就是我写个包装函数,让用户从 CTAN 上直接下载安装,绕开 tlmgr,但我估计这件事优先级不那么高,所以我就先不管它了。
我原本以为三天能解决的问题,最终花了两整周时间,这就是理想和现实的差距。其实这里面花的暗时间更多,这两周用了好多我以前积攒的经验,要是没有这些年踩坑的经验,恐怕两个月都搞不定。
dapengde 投向 Linux 要慎重。建议还是先用虚拟机玩一年再说,看适不适应。Linux 对 R 用户来说最大的不便就是有些包需要从源码编译,得寻找相应的头文件包(什么 libcurl4-dev 之类的),这个有点烦。对普通用户来说,Linux 娱乐功能可能差一点。我已经退出这个江湖四年,但就 R 包开发者而言,Linux 应该比 Windows 还是方便更多,macOS 本质是 Unix,所以对开发者来说也不错,就是贵,而且被苹果的屏幕惯坏眼睛之后,看别的电脑屏幕总觉得线条不够清晰。
fedora 27,今天测试报错
错误: Functions that produce HTML output found in document targeting latex output.
Please change the output type of this document to HTML. Alternatively, you can allow
HTML output in non-HTML formats by adding this option to the YAML front-matter of
your rmarkdown file:
always_allow_html: yes
Note however that the HTML output will not be visible in non-HTML formats.
停止执行
但我的头文件是这样的
output:
pdf_document:
latex_engine: xelatex
documentclass: ctexart
所以这个
always_allow_html: yes
怎么换成 no
lovebluesky 错误消息说你的 R Markdown 文档中包含 HTML 元素。在 PDF 输出中是不能有 HTML 元素的。
yihui 明白了,大概因为我这两天正在弄 leaflet吧,但是还有报错:
!LaTeX Error: File `ctexart.cls' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: cls)
Enter file name:
! Emergency stop.
<read *>
l.2 \usepackage
pandoc: Error producing PDF
错误: pandoc document conversion failed with error 43
停止执行
> library(tinytex)
> tlmgr_search('ctexart.cls')
tlmgr search --file --global 'ctexart.cls'
sh: tlmgr: 未找到命令
Warning message:
In tlmgr(c("search", if (file) "--file", if (all) "--all", if (global) "--global", :
TeX Live does not seem to be installed. See https://yihui.name/tinytex/.
> tlmgr_install('ctex')
tlmgr install ctex
sh: tlmgr: 未找到命令
tlmgr path add
sh: tlmgr: 未找到命令
Warning messages:
1: In tlmgr(c("install", pkgs), usermode) :
TeX Live does not seem to be installed. See https://yihui.name/tinytex/.
2: In tlmgr(c("path", match.arg(action))) :
TeX Live does not seem to be installed. See https://yihui.name/tinytex/.
lovebluesky 请根据警告信息的提示看网页并安装 TinyTeX。
yihui 我已经按照你中文文档安装过了,并且没报错,所以很奇怪为什么没有安装,而且我 'library(tinytex)' 并没有报错,是不是说明我已经安装好了tinytex了?回家再重新安装一下看看吧。
lovebluesky 你有没有运行过 tinytex::install_tinytex()
来安装 TinyTex? tinytex 的 r 包是安装 TinyTex 这个 tex 发行版的必要不充分条件
yufree 这个印象里是直接从谢老大的中文文档里复制运行过了,但既然你的回复谢老大都点赞了,那基本可以确定是我漏掉了,sorry,我只是比较喜欢 Rmarkdown 编辑文档的方式,但很多东西都不太懂,给大家添麻烦了,感谢回复。
lovebluesky
还是命名的问题造成误解,全小写的tinytex是你装的r package, TinyTeX这种坑坑洼洼佶屈聱牙一波未平一波又起的名字指的是latex库。
话说是不是可以把这个库塞进r包里,就像rstudio自带pandoc一样。
tctcab 我之所以不想打包,就是因为 LaTeX 世界的许可证实在是很奇葩,我没见过哪个别的社区的开源许可证如此模糊。参见 FAQ 2:https://yihui.name/tinytex/faq/ TeX Live 自己的许可证说不清,CTAN 上的包也不能保证全部免费开源,加上 LaTeX 社区还有自己独特的 LPPL:https://www.latex-project.org/lppl/ 所以我只敢提供安装脚本。