yihui PNAS问题已经解决,Andrew Gelman 那个我一直以为是某神秘大牛期刊,例如 “Papers Passed by Nature And Science ”

dapengde chemistry 模版跟 discussion 模版里加上 \usepackage{lmodern} 应该可解决问题,不算是tinytex 的锅,参见 yufree

    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 包最新版。

      1. 先用 bookdownplus::bookdownplus('discussion') 生成了一套 bookdown 需要的文件。
      2. 然后按 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.
        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()或别的。
        1. 如果写成 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.
        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 的出现,能最终实现车同轨书同文。当然,到达这个目标之前,可能会加剧混乱……

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