字体问题 ctex 包应该早已经可以根据操作系统自动选择了,瘟到死和苹果都有自带中文字体,Linux 下也有保底的 Fandol 字体,所以现在完全没必要写死为宋体。当然这问题如 @Cloud2016 所说,历史的惯性太大了。LaTeX 这种东西大家都不敢随便动(问你惊喜不惊喜、敢动不敢动?不敢动不敢动),宁愿用十年前的模板和软件吊死在 Windows 上,也不敢轻易尝试新版本,因为一旦搞砸,这会是一个吸收时间的黑洞,代价太大。

所以我已经开始启程走 CSS 排版之路,直接从浏览器生成高质量 PDF。

    Cloud2016 yihui 有点诡异。tlmgr 的升级我没有做,改天试试是不是这个问题。

    话说人们对 pdf 和 doc 格式的依赖也是属于历史惯性吧,因为看上去就像打印出来的。现在无纸化越来越成熟,根本不需要打印,慢慢也就淘汰了吧。

    我们痛苦地制作出适合打印的pdf,然后痛苦地在kindle上读pdf……何苦……

      dapengde 核心问题在于需不需要“页”的概念。对短文档来说无所谓,是不是分成两三页都可以很快看完。问题只是长文档,如果分页的话,读起来让人不那么绝望,随时知道进度条。至于是否打印,与阅读习惯有关,而且翻一本纸书比翻一本电子书稍微容易一点。当然,我也觉得分页排版主要还是历史惯性的原因。

      dapengde

      windows下测了一下,pdf通过tinytex装了一堆库之后编译成功,
      一开始是缺ctex库自动安装失败,后来tinytex::tlmgr_update()升级之后就可以了。
      当然我还升级rmarkdown到github的最新版本不知道有木有关系…

      @Cloud2016 @tctcab 我把 tlmgr, rmakrdown, bookdown 全都升级了,故障依旧:

      • bookdown-ucas 不能成功编译,显示 ! LaTeX Error: \CJKunderlinecolor undefined.log 文件)。

      • bookdown-pku 貌似编译完了,但没有生成 pdf 文件(log 文件)。我留意到出现了个 missfont.log 文件,不明白是不是缺少了什么字体。

      看大家用的系统比较新,怀疑是不是我的 windows 7 的问题?

      > devtools::session_info()
      Session info ------------------------------------------------------------------------------------
       setting  value                                              
       version  R version 3.5.1 (2018-07-02)                       
       system   x86_64, mingw32                                    
       ui       RStudio (1.1.456)                                  
       language (EN)                                               
       collate  Chinese (Simplified)_People's Republic of China.936
       tz       Europe/Berlin                                      
       date     2018-09-15                                         
      
      Packages ----------------------------------------------------------------------------------------
       package    * version date       source                            
       backports    1.1.2   2017-12-13 CRAN (R 3.5.0)                    
       base       * 3.5.1   2018-07-02 local                             
       bookdown   * 0.7.18  2018-09-15 Github (rstudio/bookdown@b657ab3) 
       compiler     3.5.1   2018-07-02 local                             
       curl         3.2     2018-03-28 CRAN (R 3.5.1)                    
       datasets   * 3.5.1   2018-07-02 local                             
       devtools     1.13.6  2018-06-27 CRAN (R 3.5.1)                    
       digest       0.6.17  2018-09-12 CRAN (R 3.5.1)                    
       evaluate     0.11    2018-07-17 CRAN (R 3.5.1)                    
       git2r        0.23.0  2018-07-17 CRAN (R 3.5.1)                    
       graphics   * 3.5.1   2018-07-02 local                             
       grDevices  * 3.5.1   2018-07-02 local                             
       htmltools    0.3.6   2017-04-28 CRAN (R 3.5.1)                    
       httr         1.3.1   2017-08-20 CRAN (R 3.5.1)                    
       knitr        1.20    2018-02-20 CRAN (R 3.5.1)                    
       magrittr     1.5     2014-11-22 CRAN (R 3.5.1)                    
       memoise      1.1.0   2017-04-21 CRAN (R 3.5.1)                    
       methods    * 3.5.1   2018-07-02 local                             
       R6           2.2.2   2017-06-17 CRAN (R 3.5.1)                    
       Rcpp         0.12.18 2018-07-23 CRAN (R 3.5.1)                    
       rmarkdown    1.10.13 2018-09-15 Github (rstudio/rmarkdown@df4ec91)
       rprojroot    1.3-2   2018-01-03 CRAN (R 3.5.1)                    
       rstudioapi   0.7     2017-09-07 CRAN (R 3.5.1)                    
       stats      * 3.5.1   2018-07-02 local                             
       stringi      1.2.4   2018-07-20 CRAN (R 3.5.1)                    
       stringr      1.3.1   2018-05-10 CRAN (R 3.5.1)                    
       tools        3.5.1   2018-07-02 local                             
       utils      * 3.5.1   2018-07-02 local                             
       withr        2.1.2   2018-03-15 CRAN (R 3.5.1)                    
       xfun         0.3     2018-07-06 CRAN (R 3.5.1)                    
       yaml         2.2.0   2018-07-25 CRAN (R 3.5.1)                

        dapengde

        ucas的模板试了一下,跟你的报错一样,注释掉
        https://github.com/pzhaonet/bookdown-ucas/blob/master/Style/ucasthesis.cls#L122
        这一行之后可以编译成功。

        看代码猜测是把下划线设为黑色不过看pdf里下划线都正常嘛?

        Session info --------------------------------------------------------------------------------
         setting  value                       
         version  R version 3.5.1 (2018-07-02)
         system   x86_64, mingw32             
         ui       RStudio (1.1.419)           
         language (EN)                        
         collate  English_United States.1252  
         tz       Australia/Brisbane          
         date     2018-09-16                  
        
        Packages -----------------------------------------------------------------------------------
         package   * version date       source                            
         base      * 3.5.1   2018-07-02 local                             
         bookdown    0.7     2018-02-18 CRAN (R 3.5.1)                    
         compiler    3.5.1   2018-07-02 local                             
         datasets  * 3.5.1   2018-07-02 local                             
         devtools    1.13.6  2018-06-27 CRAN (R 3.5.1)                    
         digest      0.6.16  2018-08-22 CRAN (R 3.5.1)                    
         evaluate    0.11    2018-07-17 CRAN (R 3.5.1)                    
         graphics  * 3.5.1   2018-07-02 local                             
         grDevices * 3.5.1   2018-07-02 local                             
         htmldeps    0.1.1   2018-09-15 Github (rstudio/htmldeps@c1023e0) 
         htmltools   0.3.6   2017-04-28 CRAN (R 3.5.1)                    
         knitr       1.20    2018-02-20 CRAN (R 3.5.1)                    
         magrittr    1.5     2014-11-22 CRAN (R 3.5.1)                    
         memoise     1.1.0   2017-04-21 CRAN (R 3.5.1)                    
         methods   * 3.5.1   2018-07-02 local                             
         Rcpp        0.12.18 2018-07-23 CRAN (R 3.5.1)                    
         rmarkdown   1.10.13 2018-09-15 Github (rstudio/rmarkdown@df4ec91)
         stats     * 3.5.1   2018-07-02 local                             
         stringi     1.1.7   2018-03-12 CRAN (R 3.5.0)                    
         stringr     1.3.1   2018-05-10 CRAN (R 3.5.1)                    
         tools       3.5.1   2018-07-02 local                             
         utils     * 3.5.1   2018-07-02 local                             
         withr       2.1.2   2018-03-15 CRAN (R 3.5.1)                    
         xfun        0.3     2018-07-06 CRAN (R 3.5.1)                    
         yaml        2.2.0   2018-07-25 CRAN (R 3.5.1)                    

          dapengde missfont.log 文件

          可以这样查看缺失字体

          tlmgr search --file --global "qtmb.pfb"
          tlmgr.pl: package repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet (verified)
          tex-gyre:
          	texmf-dist/fonts/type1/public/tex-gyre/qtmb.pfb

          把 tex-gyre 安装再试试

            Cloud2016 tex-gyre 安装了,仍然编译不成功。看起来仍然是字体缺失的问题。

            tctcab 哈哈,对,注释掉这一行确实可以跳过这一步了,然而又遇见了跟 bookdown-pku 同样的问题(见log 文件):字体。

            这两个模板都表现为:.tex 文件已经顺利生成了,并被 bookdown 移至默认的 _book/文件夹,但 pdf 文件没生成,而 bookdown 误以为生成了,想打开却打不开:

            Output created: _book/pku.pdf
            Error in tools::file_path_as_absolute(output_file) : 
              file '_book/pku.pdf' does not exist

            @yihui 我觉得 bookdown 在这里给的上述信息提示不大对头。

            对于上述字体问题,我在 TeXStudio 下面编译了一下 bookdown 生成的 .tex文件,得到的错误提示是:

            xdvipdfmx:fatal: Could not find encoding file "8r.enc". Output file removed.
            
            fwrite: Broken pipe xelatex.exe:
            
            Process exited with error(s)

            于是就下载了个"8r.enc"文件,再编译,得到新的错误提示:

            name = utmri8a, rootname = utmri8a, pointsize = mktexmf: empty or non-existent rootfile!
            
            kpathsea: Running mktexmf utmri8a.mf The command name is C:\Users\PengZhao\AppData\Roaming\TinyTeX\bin\win32\mktexmf Cannot find utmri8a.mf . I try ps2pk --> gsftopk --> ttf2pk --> hbf2gf. Cannot find utmri8a.tfm .
            
            kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 utmri8a.pfb The command name is C:\Users\PengZhao\AppData\Roaming\TinyTeX\bin\win32\mktexpk kpathsea: Appending font creation commands to missfont.log. xdvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output... Output file removed.
            
            fwrite: Broken pipe
            
            xelatex.exe:
            
            Process exited with error(s)

            里面稀里糊涂的东西太多,我目前止步于此了。

              dapengde

              看之前记录,是不是混装了多个latex库导致的啊…latex多了说不定会互相打架。

                tctcab 嗯……有可能。我每次都是删掉上一个,再装下一个。但保不齐藏在某个地方的什么东西没删干净……改天装个虚拟系统,干干净净做实验。

                  dapengde 应该稍稍再坚持一下就好了,还是之前的思路,凡是字体问题都可以这样搜,然后把相应的包装上,至少可以解决 99% 的字体缺失问题

                  tlmgr search --file --global "utmri8a.pfb"
                  tlmgr.pl: package repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet (verified)
                  times:
                          texmf-dist/fonts/type1/urw/times/utmri8a.pfb
                  tlgs.win32:
                          tlpkg/tlgs/fonts/utmri8a.pfb
                  
                  
                  tlmgr search --file --global "8r.enc"
                  tlmgr.pl: package repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet (verified)
                  context:
                          texmf-dist/fonts/enc/dvips/context/q-8r.enc
                  dvips:
                          texmf-dist/fonts/enc/dvips/base/8r.enc
                  txfonts:
                          texmf-dist/fonts/enc/dvips/txfonts/tx8r.enc

                  此外,我这整理了一个比较小功能又比较全的支持中文的 LaTeX 包的列表 TeXLive.pkgs 你可以都装上试一下,我想里面大多数包你都已经装好了

                    Cloud2016 这个列表不错!于是我都装了:

                    link <- 'https://raw.githubusercontent.com/XiangyunHuang/Thesis-Template-Bookdown/master/latex/TeXLive.pkgs'
                    pkgs <- readLines(link)
                    for(pkg in pkgs) tinytex::tlmgr_install(pkg)

                    上面那两个缺失文件是装上了,现在的新问题是找不到 'utmri8a.mf':

                    name = utmri8a, rootname = utmri8a, pointsize = mktexmf: empty or non-existent rootfile!
                    
                    kpathsea: Running mktexmf utmri8a.mf The command name is C:\Users\PengZhao\AppData\Roaming\TinyTeX\bin\win32\mktexmf Cannot find utmri8a.mf . I try ps2pk --> gsftopk --> ttf2pk --> hbf2gf. Cannot find utmri8a.tfm .
                    
                    kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 utmri8a.pfb The command name is C:\Users\PengZhao\AppData\Roaming\TinyTeX\bin\win32\mktexpk kpathsea: Appending font creation commands to missfont.log. xdvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output... Output file removed.
                    
                    fwrite: Broken pipe xelatex.exe:
                    
                    Process exited with error(s)

                    搜一下:

                    > tinytex::tlmgr_search('utmri8a.tfm')
                    tlmgr search --file --global "utmri8a.tfm"
                    tlmgr.pl: package repository http://mirror.informatik.hs-fulda.de/tex-archive/systems/texlive/tlnet (not verified: gpg unavailable)

                    没找到……

                      dapengde 我搞不定了,一直重复不出来你的错误,我建议你只装一个 TinyTeX 然后专注在这个上面测试你的模板,遇到问题实在搞不定了,就吼 yihui

                        dapengde 在用 R Markdown 的时候基本上不太可能需要用到 tlmgr_search(),因为这是 tinytex 会自动执行的事情。如果它自动找都找不到的话,那手动找应该也是找不到的。

                        utmri8a 应该是跟 times 包有关。

                        另外 tlmgr_install() 已经向量化了,tinytex::tlmgr_install(pkgs) 即可,不需要循环。

                        TinyTeX 搞不定的 LaTeX 问题可能说明模板不太具备可移植性(比如写死了字体为宋体之类的)。

                        1 年 后

                        一直都是用TeXLive,最近玩bookdown发现得用TinyTeX,反正硬盘有空间,就让它装着。对于多数情况这个足够了。可惜最近一直被黄大@Cloud2016的那个elegantbook 模板给卡着,原因是elegantbook.cls 用到的字体比较特别。要么要有esint,要么要有mtpro2. 这个esint 不论我是在TeXLive 下或者TinyTeX下都装不到。mtpro2 在TeXLive 下我可以装好,但是不知道怎么给TinyTeX 用,看了谢大@yihui的博客和FAQ,也没有搞懂怎么装。还请谢大,黄大,和各位老师指导!谢谢!

                          Fye elegantbook 模板后来没时间搞了,掉了链子,有很多特性还没有搬进来。但是只要把相关的宏包都装上,应该可以跑通,这是 LaTeX 宏包列表 <https://github.com/XiangyunHuang/ElegantBookdown/blob/master/latex/TeXLive.pkgs>

                          esint 宏包应该有的,我能搜到

                          tinytex::tlmgr_search('mtpro2.sty')
                          tlmgr search --file --global "mtpro2.sty"
                          tlmgr.pl: package repository http://mirror.lzu.edu.cn/CTAN/systems/texlive/tlnet (verified)
                          > tinytex::tlmgr_search('esint.sty')
                          tlmgr search --file --global "esint.sty"
                          tlmgr.pl: package repository http://mirror.lzu.edu.cn/CTAN/systems/texlive/tlnet (verified)
                          esint:
                                  texmf-dist/tex/latex/esint/esint.sty

                          你提到的 mtpro2 字体是商业字体,有轻量版 lite 需要自己去下载安装 <https://pctex.com/mtpro2.html>

                            Cloud2016
                            我记得tinytex可以自己搜索和安装缺少的latex包,这个是啥问题?

                            • Fye 回复了此帖

                              Cloud2016 搞定了。AppData/Roaming/TinyTeX 下面有个texmf_local 的文件夹,按照TeXLive 装字体进去就可以了。

                              esint 的问题不是找不到pacakge 是找不到字。刚搜到原因。最新版的esint把字体删了。要么要把esint倒回去旧的版本1.2b。或者下载字体放到合适的位置。具体可以看缺 TFM 文件:LaTeX 字体包 esint 需从 v1.2c 降级到 v1.2b.

                              elegantbook 看着确实不错,不过感觉还有不少小的问题,比如titlepage注释掉subtitle就会出错。
                              bookdown的话做起来也挺费劲儿的,你这个模板我觉目前已经够用了。不过还是期待各位老师能给我们带来更好用的模板。😄

                              谢谢黄老师!