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')
              )

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

                yihui 那就先玩虚拟机。我眼睛不知是有啥毛病,盯苹果的显示屏反而受不了。

                参考文献问题,我装了 devtools::install_github(('rstudio/rmarkdown@feature/tinytex')),但只要在index.Rmd 的 yaml 声明里带扩展名如bibliography: [book.bib],就会出问题:用 bookdown + CTeX 编译出来的pdf里参考文献是问号。只要改成 bibliography: [book] 就好了。

                不过,既然没有别人反馈这个问题,那说不定是我电脑有啥毛病。我懒得理了,反正快换电脑了。

                  dapengde CTeX 和 TinyTeX 二者如果都安装了,那么只能有一者在 PATH 环境变量上。你可以检查一下 Sys.getenv('PATH')。如果你只安装了 CTeX 而没装 TinyTeX 而跑不出参考文献来,那么这问题就诡异了,因为我无法重现,你只能自己排错(例如 debug(tinytex::: tweak_aux) 然后在交互式环境下跑 tinytex::latexmk()),相关的扩展名自动处理在这一行:

                  https://github.com/yihui/tinytex/blob/ad2e0fa6b/R/latex.R#L161

                  Cloud2016 注意我上面用的是 HTTP 链接,如果要用 HTTPS,需要有 gpg 支持,参见 FAQ 12

                    yihui 移动 TinyTeX 位置,找不到字体了

                    • 将 TinyTeX 默认存放位置 %APPDATA%\TinyTeX 移动到D盘,即 D:\TinyTeX,然后执行
                      "D:\TinyTeX\bin\win32\tlmgr" path add

                    • 安装几个常用字体 tinytex::tlmgr_install(c('sourcesanspro','sourcecodepro','sourceserifpro'))

                    • fc-cache -f -v 刷新字体缓存,问题是缓存不到 D:\TinyTeX\texmf-dist\fonts 目录下的字体,以前使用 TeXLive 没这问题,我知道有个笨办法,挨个找到字体文件,手动安装到 C:\Windows\Fonts,有没有好点的办法?

                    PS: 将目录 D:\TinyTeX\texmf-dist\fonts 添加到当前用户的 Path 路径上也不管用

                    fc-cache -f -v
                    Note that it needs some time to create caches,
                    especially if there are many large font files.
                    Wait with patience.
                    
                    C:/Windows/fonts: caching, new cache contents: 850 fonts, 0 dirs
                    C:/Users/XiangYun/AppData/Local/Temp/RtmpkNFfPn/install-tl-20171205/TinyTeX/texmf-dist/fonts/opentype: skipping, no such directory
                    C:/Users/XiangYun/AppData/Local/Temp/RtmpkNFfPn/install-tl-20171205/TinyTeX/texmf-dist/fonts/truetype: skipping, no such directory
                    D:/TinyTeX/texmf-var/fonts/cache: cleaning cache directory
                    fc-cache: succeeded

                      yihui 没有起作用,还是扫的 C:/Users/XiangYun/AppData/Local/ 目录,如上

                        yihui 1. 但是 fc-list :lang=en-us | sort > D:/en.txt 保存的 txt 文件里还是找不到我安装的字体,也就没法在文中调用\setmainfont{Source Sans Pro}

                        1. 关于参考文献的引用,我发现tinytex::latexmk('manual.tex', engine = 'xelatex', bib_engine = 'bibtex')并未达到下面依次执行的效果
                        • xelatex manual.tex
                        • bibtex manual 注意不是 bibtex manual.tex
                        • xelatex manual.tex
                        • xelatex manual.tex

                        manual.tex 文件 下载

                          yihui 确实很诡异。为了简化问题,我把 tinytex、TinyTeX、CTeX 都卸载了,然后仅重装 CTeX,没装 TinyTeX,仍然没解决。不管是在 bookdown 里,还是用别的编辑器例如 TeXStudio,都不能往 \bibliography{book} 里添加扩展名 .bib。只要一添加,系统就说找不到 book.bib.bib。不知道是谁给多添加了个 .bib。我记得几个月前是没有这个问题的。

                          我看到也有别人(路人甲路人乙)遇到了这个问题,看原因也没看出个所以然来,不过解决办法倒都是“去掉扩展名 '.bib'”。另外,有几处(示例1示例2)都强调在声明 \bibliography 时不要加扩展名。

                          应该是 BibTeX 的问题。我的 BibTeX, Version 0.99d (MiKTeX 2.9.6500),是在 MiKTeX 的包管理器里最新安装的最新版。

                          补充:更为奇怪的是,RStudio - New Files - Rmarkdown - From Template,选个 rticle 模板,里面的 yaml 都是带 .bib 扩展名的,编译出来的 pdf 参考文献却是正常的。所以我彻底糊涂了。

                            Cloud2016 1. 这个问题有点复杂,不是三两分钟能搞定的事,我得再花点时间。关键是 texmf-var/fonts/conf/texlive-fontconfig.conf 里面的路径不对。

                            1. 除非你安装了 LaTeX 包 latexmk 以及 Perl,否则 tinytex::latexmk() 应该会按你说的顺序执行。

                            dapengde 是不是我仍然没说清楚……首先,不能加 .bib 扩展名是 MiKTeX 中的 bibtex 造成的坑(如果你说你的参考文献库是 foo,那么它就会去找 foo.bib;如果你说是 foo.bib,那么它就会……去找 foo.bib.bib;总之它是坚持一定要在你给的文件名后面再多加一个 .bib;蠢成这样,就问你想不想杀了它……可能也是聪明反被聪明误),这个坑本不应该存在;其次,因为这个坑已经存在多年(仅存在于 MiKTeX 中;因为 CTeX 本质是 MiKTeX 加一些杂七杂八的套件,所以 CTeX 也继承了这个坑),我在 tinytex R 包中已经把它填了;关键问题是有且仅有 tinytex R 包的 latexmk() 函数默默填了这个坑。只要你用 MiKTeX 或者 CTeX,就只能依赖 tinytex 去编译带参考文献的文档。如果是 R Markdown 文档,那么所有你需要做的就是安装那个 feature/tinytex 分支(这个分支会合并到下一个 rmarkdown 版本中)。TinyTeX 本质是 TeX Live,这个坑不存在,你装不装它,都不影响参考文献的编译。当然我是推荐你装它,因为它是跨平台的,省得一天到晚操心在不同系统下到底加不加 .bib 扩展名。

                            你引的示例1说的并不是说 \bibliography{} 中不能加 .bib 扩展名,而是运行 bibtex 命令行时可以不加 .aux 扩展名。 这是由于 bibtex foobibtex foo.aux 通常是等价的。

                            我刚更新了一下 tinytex R 包,如果检测到参考文献编不出来,就会自动打印出详细的错误信息。你可以再试试:

                            devtools::install_github(
                              c("yihui/tinytex", "rstudio/rmarkdown@feature/tinytex")
                            )

                            看到底具体的错误信息是什么。

                              Cloud2016 字体问题我搞明白了,卸载再重装 xetex 包应该就好了:

                              library(tinytex)
                              tlmgr_remove('xetex'); tlmgr_install('xetex')

                              如果要改变安装路径,最好是一开始就直接把路径传给 install_tinytex() 函数:

                              tinytex::install_tinytex(dir = "D:\\TinyTeX")

                              当然,既然你已经装好了,就没必要再重新折腾一遍了,按我前面说的重装 xetex 包就够了。

                              另外,sourcesanspro 等包的正确使用姿势貌似应该是 \usepackage{} 而不是 \setmainfont{},如:

                              \usepackage[default]{sourcesanspro}

                              或者相应的 R Markdown:

                              output:
                                pdf_document:
                                  latex_engine: xelatex
                                  extra_dependencies:
                                    sourcesanspro: default

                              还有,编译 .tex 文件的时候用具体的 tinytex::xelatex() 函数就可以了,不必打冗长的 latexmk(...)