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,但我估计这件事优先级不那么高,所以我就先不管它了。

    yihui 确实是那两个包的问题

    • 没有 lmodern 不安装 metafont/mfware 依旧报错
    • 安装 metafont/mfware 包后编译成功

    那么现在的问题就是把 metafont 跟 mfware 写到 rticles 包模版里还是 TinyTex 里直接打包这两个包了

      yihui
      命名前后不统一,为什么TinyTeX要用驼峰命名,啊啊啊啊啊啊啊啊啊啊

        yufree 太好了。我看了一下这两个包的大小,只有 1M 左右,所以我直接打包了。非常感谢二位坚持不懈的测试!我感觉现在基本上已经天亮了,应该不会有什么别的诡异问题了。

        tctcab 因为 LaTeX / TeXLive / MiKTeX / MacTeX 全都是驼峰,我只好跟风了。

          yihui 谢大不用这么客气,这个包的出现解决了开源社区长久以来的问题(特别对 travis-ci 的在线测试),是用户的福音,水平低到我这样就算有心解决也没能力去面对 TexLive 这个庞然大物,终于可以放心把它删掉了,全面转 TinyTex

            yihui yufree 嗯,我也终于可以删掉 CTeX 这个庞然大物了。象棋围棋包在展示时还是非常酷的,不过我现在肯定用不着。说不定将来退休之后会拿来研究棋谱用。

            这次弄得我都有意从 windows 转向 linux 阵营了,能省好多心。感谢益辉又为开源世界贡献了一件给力的宝贝。

              我原本以为三天能解决的问题,最终花了两整周时间,这就是理想和现实的差距。其实这里面花的暗时间更多,这两周用了好多我以前积攒的经验,要是没有这些年踩坑的经验,恐怕两个月都搞不定。

              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/.

                      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/ 所以我只敢提供安装脚本。

                              在安装 TeX 包的过程中,运行很久(如下),我估计主要是网速问题,以前使用 TeXlive 或 MikTeX 时候,都自己先设定就近的仓库,如 <https://mirrors.tuna.tsinghua.edu.cn/CTAN/>,再安装都是很快的,在 tinytex 包中是否实现了这个?

                              library(tinytex)
                              tlmgr_search('/framed.sty')  # search for framed.sty
                              tlmgr_install('framed')

                                Cloud2016 暂时没有实现,不过这是个好想法。安装 TinyTeX 之前应该让用户能自己选择一个镜像。

                                既然你已经安装完了,你可以事后设定 CTAN 镜像,比如:

                                tinytex::tlmgr(
                                  c('option', 'repository', 'https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet')
                                )

                                在这之后再安装包就会快很多了。