R+markdown+LaTeX 中文编译解决方案
一丢丢前言
很久之前曾试图以Rmarkdown编译pdf文档,无奈怎么鼓捣都会error,搜索了很久都没能找到比较好的解决方案。在配置上将编译器调成了xeLaTeX后就不了了之。这两天心血来潮研究了一下xeLaTeX,终于明白之前为什么总是失败了。入LaTeX门的时候一心一意盯着pdfLaTeX的后果就是入了过时的CJK包的坑,想要扩展的时候就跳不出来了。如今爽快的以xeLaTeX+xeCJK来处理之后终于打通了Rmarkdown编译中文pdf文档的任督二脉,且让我暗自欣喜一阵:)不是什么大神,仅给出最简的配置方法大家自己鼓捣去吧~
接下来是塞牙缝的最简配置:
配置
- 安装 R、Rstudio 以及 MiKTeX (推荐直接上 CTeX 的贼船)。
- Rstudio 中的配置:
Tools -- Global Options -- General, 设置缺省的编码格式为UTF-8(Default text coding: UTF-8)。当然,如果是默认的[Ask]状态,Rstudio弹框框出来的时候再选 UTF-8 也是可以的。 - 依然是 Rstudio ,
Tools -- Global Options -- Sweave,将编译器设置为 xeLaTeX. 另外,最上面有一个Weave Rnw file using的选项,在 Github 里有一个不错的 Rnw 编译pdf的解决方案,xccds / ggplot2.Rnw, 如果想要用以上方式进行中文编译的话,别忘了将这个选项设为 knitr. 啊哈,想当年遍寻中文编译方案无果的时候这位仁兄让我看到了一丝曙光~ - Rmd 里的 yaml 栏(就是最上面的那两个三条横线中间的部分)需要玩耍一些小 trick 噢:)详见下。
- 还需要在 Rmd 文件路径下放置一个header.tex来包含tex文件的基本信息。详见下。
文本内容
Rmd 文件
---
title: "这是一个标题"
author: "hi,我是作者"
output:
pdf_document:
includes:
in_header: header.tex
keep_tex: yes
latex_engine: xelatex
word_document: default
html_document: default
---
我要打中文!!让我说句 helloworld 吧!
- 自己手动敲的话注意缩进!!!Rmd 的 yaml 栏比较傲娇,有一些缩进缺了就会 error 了喵~
需要注意的就是latex_engine:xelatex 了。即使设置了默认的编译器为xeLaTeX依旧要手动再声明一遍编译器(我也不知道为什么R这么傲娇)
而对于 in_header:header.tex,想对 LaTeX 动手动脚的话就是它啦~
header.tex
首先,tex文件最好也存为 UTF-8 格式,特别是在声明xeCJK字体时用到了中文的情况下。
然后,嗯,最简的解决方案不是么?哦呵呵~
法一:站在巨人的肩膀上——CTex
如果你安装了CTeX套装,一句话足矣~
header.tex
\usepackage{ctex}
法二:调戏一下 xeCJK
header.tex
%\documentclass{article} %虽然加了注释号,但请注意这一行绝对不能注释掉!因为pandoc后生成的tex文件已含有此句
\usepackage[BoldFont,SlantFont,CJKsetspaces,CJKchecksingle]{xeCJK}
\setCJKmainfont[BoldFont=SimSun]{Microsoft YaHei} %我是雅黑控
\setCJKmonofont{SimSun}% 设置缺省中文字体
\parindent 2em %段首缩进
\documentclass{article} 一句万万不能加上!!表手多一时顺手打上了,酱紫直接就跪了。因为 knitr 使用的 md 转 tex 的编译器 pandoc 在生成 tex 的时候就会首先加上\documentclass{article}, 所以如果在 header.tex 里又来一遍的话会error。而上述ctex解决方案里不出现这个问题应该是将documentclass语句视为覆盖设置。
So?
header 的运用可以各种的化腐朽为神奇呐,棒棒哒~~~
想加载其它 package 的时候就在 header 里加上是一件多爽快的事情呐~~~
提点一个小 trick,就是,在Rstudio编译error了以后,可以到路径下看一看pandoc调戏出来的tex文件,纠错什么的看tex顺眼多了,而且tex才是最实质的导致编译进程停止的罪魁祸首喵~
Last but not least, 如果要做精细排版的话,还是直接在文本编辑器里敲 TeX 吧。去绕 R 呀 markdown 呀什么的其实只是为了感慨一下 R 的无所不能而已。嗯,以上。
R+markdown+LaTeX 中文编译解决方案的更多相关文章
- Atom+latex+中文环境
最近在写论文,的路上.很多idea都受限于官方给的模板不能够添加自己即时的中文idea,所以添加中文到文献中很有必要,这里记录自己添加中文的几个小步骤 1. 受限将atom中的latex packag ...
- JSP中pageEncoding和charset区别,中文乱码解决方案(转载)
转载自:JSP中pageEncoding和charset区别,中文乱码解决方案 JSP指令标签中<%@ page contentType="text/html;charset=GB23 ...
- boost::xml——基本操作以及中文乱码解决方案 (续)
本博文主要想说明以下两点: 1.对于上一篇的<boost::xml——基本操作以及中文乱码解决方案>解释,这篇博文基本解决了正确输入输出中英文问题,但是好像还没有解决修改中文出现乱码的问题 ...
- Ubuntu下LaTex中文环境安装与配置
转载自:http://www.linuxidc.com/Linux/2012-06/62456.htm LaTeX是一个强大的排版软件,但是其最初只是为英文排版而设计的.为了使其能够胜任中文排版的重任 ...
- 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...
- R贡献文件中文
贡献文件 注意: 贡献文件的CRAN区域被冻结,不再被主动维护. 英文 --- 其他语言 手册,教程等由R用户提供.R核心团队对内容不承担任何责任,但我们非常感谢您的努力,并鼓励大家为此列表做出贡献! ...
- Latex中文utf-8编码的三种方式
我们知道Latex一般用CJK和CTEX宏包支持中文编辑,CJK和CTEX的默认编码是GBK,而windows下的默然编码就是GBK,因此CJK和CTEX不需要特殊配置就可以直接支持中文Latex编译 ...
- Ubuntu系统配置Zabbix前端及中文乱码解决方案
Ubuntu系统配置Zabbix前端及中文乱码解决方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装zabbix 博主推荐阅读: https://www.cnblogs ...
- latex中文支持ubuntu
latex安装: sudo apt install texlive-full 中文字体安装: sudo apt-get install latex-cjk-all 字体包中包含bsmi,bk ...
随机推荐
- GIT学习笔记(4):远程分支
GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...
- javascript 中的比较大小,兼 typeof()用法
javascript中的排序: 1.不同类型 比 类型 (字符串 > 数字) 2.同类型:(字符串 比 按字母顺序 )(数字 比 大小) 测试: <!DOCTYPE html> ...
- Spring 之定义切面尝试(基于 XML)
有些场景下只能基于 XML 来定义切面. [Spring 之定义切面尝试] 1.XML 下定义切面(首先是要有一个对应的类...显然要比基于注解的麻烦) <?xml version=" ...
- GIT使用—一些概念
(1)Git版本库(repository) 一个简单的数据库,包括所有用来维护与管理项目的修订版本和历史的信息. Git维护两个主要的数据结构: 对象库(object store)-在复制操作时能进行 ...
- 项目中使用better-scroll实现移动端滚动,报错:Cannot read property 'children' of undefined better-scroll
就是外面的盒子和要滚动的元素之间要有一层div, 插件挂载的元素是menuWrapper,可以滚动的元素是ul,在这两个元素之间加一个div元素即可解决问题.
- MySQL详解--锁,事务(转)
锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...
- UIScrollView监听静止的数种情况
1.直接通过block -(void)testInBlock { //通过block监听 [UIView animateWithDuration:1.0 animations:^{ self.scro ...
- 【Java并发】Java中的原子操作类
综述 JDK从1.5开始提供了java.util.concurrent.atomic包. 通过包中的原子操作类能够线程安全地更新一个变量. 包含4种类型的原子更新方式:基本类型.数组.引用.对象中字段 ...
- Python 面向对象的三大特性:封装,继承,多态
# 面向对象的三大特性:封装,继承,多态 # 继承的影响:资源的继承,资源的使用,资源的覆盖,资源的累加 # 资源的继承,在Python中的继承是指能使用父类的资源,而不是说在子类也复制一份父类代码到 ...
- [TJOI2010]打扫房间
题目描述 学校新建了一批宿舍,值日生小A要把所有的空房间都打扫一遍.这些宿舍的布局很奇怪,整个建筑物里所有的房间组成一个N * M的矩阵,每个房间的东南西北四面墙上都有一个门通向隔壁房间.另外有些房间 ...