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 ...
随机推荐
- shiro的Realm
public class UserRealm extends AuthorizingRealm { private UserService userService = new UserServiceI ...
- QT5.6.0 鼠标支持
QT5用QPA换了QWS之后,USB鼠标就不知道怎么支持,网上搜啊搜,各种尝试,终于可以了. export TSLIB_ROOT=/mnt/sdcard/tslib export TSLIB_PLUG ...
- MPU6050工作原理及STM32控制MPU6050
源:MPU6050工作原理及STM32控制MPU6050 MPU6050 介绍
- 20145120黄玄曦《网络对抗》MSF基础应用
20145120黄玄曦<网络对抗>MSF基础应用 准备工作 本来决定就是老师提供的XP虚拟机了,做着做着发现因为打补丁以及语言的问题,需要另外的虚拟机. 求来了不那么健壮的虚拟机,环境如下 ...
- JavaWeb HTTP
1. Http协议 1.1. 什么是Http协议 Http的全称为HyperText Transfer Protocol,译为超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通 ...
- Python 函数定义和使用
# 函数的概念 # 概念 # 写了一段代码实现了某个小功能; 然后把这些代码集中到一块, 起一个名字; 下一次就可以根据这个名字再次使用这个代码块, 这就是函数 # 作用 # 方便代码的重用 # 分解 ...
- [转]Markdown 公式指导手册(包含LaTeX)
Cmd Markdown 公式指导手册 本文为转载文章,并且由于LaTeX的可能不能全部兼容,所以可能有部分公式无法在博客园显示,可以移步原网站. 本文固定链接: https://www.zybulu ...
- java 使用反射
java程序中的对象在运行时会出现两种类型:编译时类型和运行时类型.例如List list = new ArrayList().其中变量list的编译时类型是List,运行时类型是ArrayList ...
- php 后台接受POST值
[场景描述]:展示型企业站制作管理后台,前端框架:vue.js2.0,bootstrap,后台语言:php [问题描述]:使用管理后台向接口发送请求时,接口使用PHP的$_POST['args'],接 ...
- TextView实现图文混合编排
TextView实现图文混合编排 一.简介 在这里实现图文混合编排使用的是:TextView中预定义的类似Html的标签 二.方法 * 1.设置好html标签的文本 String html=" ...