安装tinyTeX
参看谢益辉TinyTeX
安装tinytex
install.packages('tinytex')
tinytex::install_tinytex()
测试并调用tlmgr命令安装latex包
writeLines(c(
'\\documentclass{article}',
'\\begin{document}', 'Hello world!', '\\end{document}'
), 'test.tex')
tinytex::pdflatex('test.tex')
中文字体问题总是会在时不时出来捣乱。今天就碰到了ggplot2绘图时,latex pdf输出和html网页输出显示不一致的问题(类似的 问题报告)。
问题描述
google神搜一遍,大家普遍把问题指向:
操作系统OS问题。Linux/Mac OS普遍采用UTF-8编码格式,而Windows系统则坚持GBK编码格式。因此,如果Rstudio里Rmarkdown文件用UTF-8编码,自然就会导致Windowns粉出现悲催的混乱事件。Windowns系统下还可能存在本地字体库不全的问题。
中文字体库问题。除了系统阵营的锅,中文字体本身也会给编码世界带来混乱。其实不单是中文字体,CJK字体库就是专门为了解救中文-日文-韩文字体等东亚语言字体问题的。另外就是,字体库有“真体”(TrueType Collection 字体文件 (.ttc))等字体版本。因此,latex包\usepackage{xeCJK}渲染时,可能会提示错误(类似报告1;报告2)
engine或dev问题。第三个锅就是软件的问题了。其一,bookdown下默认的Latex引擎pdflatex对Unicode characters支持不好,需要改用xelatex引擎(yihuixie留爪)。其二,绘图装置dev也有小九九类似报告。最关键的是绘图装置可以自己根据需要设定,包括:dev=‘cairo_pdf’;dev=‘pdf’;dev=‘svg’(见友情提示)。
解决办法
(windowns系统)安装缺少的字体库。大概就先去看看“c:/windows/fonts”目录吧!。也可以在R中用package如 "showtext"来安装。——不说这个了,都是泪。
latex中设定header.tex的包调用。最重要的\usepackage{xeCJK},大抵如下:
\usepackage{xeCJK}
%\setCJKmainfont{SimSun}
\setCJKmainfont{宋体} % 字体可以更换
\setCJKmonofont{simsun.ttc} % for \textsf
\setmainfont{宋体} % 設定英文字型
\setromanfont{Georgia} % 字型
\setmonofont{Courier New}
Rmarkdown中设定engine和dev。这个地方倒是有一个逻辑性的问题我之前一直没有弄清楚。engine设好后(如前,最好用xelatex引擎),不同输出形式(pdf、html)对绘图转置dev需求是不一样的,因此需要考虑latex_engine和dev所处的环境。这个环境不一样,控制的范围自然就不同,但大概有三个级别:a. yaml区域的全局性- output环境; b. R代码块的文档级设置;c.特定R代码块的设置。
环境1:yaml区域的全局性设置
output: bookdown::pdf_document2:
latex_engine: xelatex
dev: cairo_pdf
环境2:R代码块的文档级设置
{r global_options,echo=FALSE, message=FALSE}
knitr::opts_chunk$set(fig.align='center', dev="cairo_pdf",
echo=FALSE, fig.pos = 'H') #
环境3:特定绘图R代码块环境
{r common-get-sum,echo=FALSE, dev="cairo_pdf", message=FALSE,error=FALSE,warning=F, fig.
1 配置及相关设置
1.1 yaml信息的设置
2 表格的HTML和LaTeX“和谐共存”
2.1 注意bookdown的渲染方式
2.2 环境参数的全局性影响
2.3 表格中插入有图片
2.3.1 latex宏包longtable的使用
2.4 表格中字符格式(如加粗)
2.5 表格中显示数学公式
3 block的使用
3.1 定理和证明block
3.2 个性化blocks
3.3 注意事项
4 Latex输出各种“梗”
4.1 fig.cap
4.2 latex list
4.3 段落首行缩进
4.4 页边距调整
4.5 正确设置章序号
4.6 正确处理页码序号
5 诡异现象
5.1 编译报错但删除临时文件又好了
6 blogdown相关话题(hugo academic)
6.1 通过静态页面的使用
6.2 直接引用本地数据和图片文件
bookdown编写LaTex书籍中的注意事项。
1 配置及相关设置
1.1 yaml信息的设置
只有index.Rmd具有设置yaml信息的地位!
index.
“计量经济学”形式的数学公式
本科生课程《计量经济学》会大量使用各类公式。这些公式大概有两类:
理论公式:这些数学公式的呈现基本上用不到数据报告的结果。在Rmarkdown文档中处理办法相对简单,直接使用LaTex形式代码输入即可。
报告公式:这些数学公式的呈现,跟某些数据分析报告紧密联系。此时,手工输入LaTex将会变得很不现实!一个系统性的解决思路是,利用Rmardown chunk 自己编写代码块。前边分析步骤负责出数据报告结果,后面Chunk里公式创造时直接调用数据报告的各类数值。
所以,如果一切顺利,“计量经济学”课程的大量报告公式,都可以自动地使用R函数调用实现,可谓一本万利,合算得很!
代码实现过程中的各种“梗”
实现思路倒是很清晰,Rmarkdown下的操作也是可行的。下面就是需要撸起袖子加油干,找到“聪明”的实现办法,破除各种“梗”!
格式选择真是一个大问题:关于pdf、html、word输出形式
选择Rmarkdown的一个很重要理由,就是它可以实现一份文档种格式输出。这个“理想”确实比较宏大。在数学公式领域,起码就有这几个问题:
数学公式友好度差别较大。word比较另类,数学公式支持是最糟糕的;Latex(pdf)下是最灵活的。html则最通用。所以,复杂的公式,在latex(pdf)下OK,放到word里可能就吃不消了。
package实现各不相同。如果写书,最好就是用bookdown包;如果做演示slide可以用Xaringan包;写网站文章,可以用blogdown。对于数学公式而言,最需要注意是:是否需要交叉引用(cross reference)公式。基本就是两种情形:写slide和blog默认是不交叉应用公式的;写book则必然需要的。
数学公式的排版(alignment)
这个部分折腾我很久。因为主要使用Latex语法形式来编写R chunk代码。所以必须要熟悉Latex math equation的公式环境(environment)。
独立公式环境:
\begin{equation} ... \end{equation}
\begin{align} ... \end{align}
\begin{aligned} ... \end{aligned}
\begin{alignedat}{3} ... \end{alignedat}
组合公式环境:
cat(
"\\begin{equation}",
"\\begin{alignedat}{999}",
"&\\widehat{Y}=&&+17.81&&+0.62X\\\\",
"&\\text{(t)}&&(1.9238)&&(11.9968)\\\\",
"&\\text{(se)}&&(9.2556)&&(0.0516)\\\\",
"&\\text{(fitness)}&& n=10;&& R^2=0.9473;&& \\bar{R^2}=0.9408\\\\",
"& && F^{\\ast}=143.92;&& p=0.0000",
"\\end{alignedat}",
"\\end{equation}")
\[\begin{equation} \begin{alignedat}{999} &\widehat{Y}=&&+17.81&&+0.62X\\ &\text{(t)}&&(1.9238)&&(11.9968)\\ &\text{(se)}&&(9.