在我的上一篇随笔中,我提到了 Markdown、LaTeX 和 MathJax。这几个东西对目前的网络技术文章的写作、展示都有深远的影响。在上一篇中,我还给出了一份 LaTeX 语法的学习资料。在这一篇里,我想再来谈谈 LaTeX。

在很多人心中,LaTeX 是一个很专业的排版系统,同时也是一个很复杂的系统。说到专业,确实很多科技论文都是用 LaTeX 写作,而且很多知名的杂志社只接受 LaTeX 格式的投稿,而且使用 LaTeX 排版得到的效果那是超级赞,特别是对科技论文中充斥的数学公式而言。说到复杂,不仅是因为 LaTeX 排版语言命令繁多,更因为它数之不尽的宏包,学习成本真的是相当相当相当的高。

对于一套 LaTeX 排版系统,它究竟包含哪些东西呢?我认为它主要可以分成这样几个部分:

  • 一个排版引擎,TeX 或 pdfTeX 或 XeTeX;
  • 一系列的字体;
  • 一系列的宏包;
  • 一些工具,比如用来查看各种排版引擎输出的排版结果,或者在 dvi、ps、pdf 等格式之间的转换。

而对于 LaTeX 排版系统的复杂性,我认为主要是由于历史原因引起的,理由如下:

  • 最早的由 Knuth 教授写的 TeX 引擎不支持 UTF-8 编码的输入文件,所以要让它支持中文实在是太难了;
  • 最早的 TeX 系统自带一套字体,要扩展它就得扩展相应领域的字体,比如 LaTeX 自带丰富的数学字体,要把字体安装到 TeX 系统中是一件非常复杂的事情;
  • 大量的第三方宏包,安装和学习都非常困难;
  • 都什么年代了,谁还用 dvi 格式和 ps 格式啊,用 pdf 多方便啊。

对于这些历史原因引起的复杂性,现在早就解决了,只是很多书籍没有写清楚而已。我认为现在用 LaTeX 其实很方便的,理由如下:

  • Knuth 教授的 Tex 引擎用来瞻仰即可,实际工作中使用 XeTeX 引擎,完美支持 Unicode 字符集和 UTF-8 编码,中文再也不是问题;
  • 字体神马的,Knuth 教授的 METAFONT 早过时了,现在谁还不用 TrueType 啊?好的字体当然少不了像 Microsoft、Adobe、Apple 这些既有钱又有品味的公司出品了;
  • XeTeX 引擎可以直接使用操作系统中安装的字体,再也不用考虑把字体安装到 TeX 系统中了;
  • XeTeX 引擎直接输出 pdf 格式的文件;
  • 排版也可以有 IDE 工具,比如 TeXWorks;
  • 至于宏包太多这个问题,我们可以用现成的发行版嘛,比如 texlive 套装。

下面开始实战。我是在 Ubuntu 系统下使用 texlive,为了省事,我直接安装了 texlive-full,使用如下命令:

sudo apt-get install texlive-full

然后,再安装一个 TeXWorks,命令如下:

sudo apt-get install texworks

下面是 TexWorks 的工作界面,排版引擎一定要选择 XeLaTex 哦。左边是文档编辑,右边是预览效果:

第一次运行是不可能成功的,因为还要像下面这样设置一下字体。

如果要想顺利地进行中文排版,必须得借用一点中文字体。中文排版所用到的字体一般有6种,分别是:宋体、楷体、黑体、仿宋体、隶书和幼圆。所以我从我的 Win7 系统下将这几个字体拷贝到 Ubuntu 中,把它们扔到主目录下的 .fonts 中即可。(隶书和幼圆要安装了 Office 才有。)如下图:

当然,如果不想完全达到 Windows 中的效果,也是可以不借用它的字体的。在 Linux 中,宋体、黑体和楷体是不缺的,其它字体就欠奉了。如果不借用 Windows 中的字体,则宋体可由 AR PL UMing 代替,楷体可由 AR PL UKai 代替,黑体可由 Droid Sans Fallback 代替,如下图:

然后,修改 /usr/share/texlive/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def 中的字体名称和上图中 fc-list 输出的字体名称一一对应,如下图:

看到上面的路径是不是觉得它太长了?太难找了?的确如此,texlive 的路径就是这么复杂。我第一次是根据错误信息找到的这个文件。

texlive-full 实在是太大了,我安装的时候几乎花了一夜的时间去下载。对于这么复杂的系统,它的各种配置文件啊、环境变量啊,都放在哪里呢?使用tlmgr conf命令即可查看,如下图:

对于写写中文文档,使用 ctex 宏包就足够了。并不是很复杂。LaTeX 还有一些更加复杂的功能,比如制作幻灯片啊、绘图啊什么的,都有相应的宏包可以使用,而且安装 texlive-full 的时候,都安装了非常详细的帮助文档,只需要打开/usr/share/texlive/doc.html这个文件,就可以看到所有宏包和帮助文档的列表,我之前分享的《一份不太短的LaTeX介绍》里面有,经典的《Tex by Topic》里面也有,如下图:

看到这个一公里长的帮助文档列表,你有什么感想呢?

(京山游侠于2015-01-06发布于博客园,转载请注明出处。)

再来说说 LaTeX的更多相关文章

  1. Linux 桌面玩家指南:12. 优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  2. 如何使用LaTeX让自己不乱?

    虽然说LaTeX声称排版容易,只关注内容,可是混合着源代码的结构很难让我只关注内容,最后看得眼睛疼,找什么都找不到. 匿名用户 30 人赞同 立即想到的几个建议: 选择有折叠功能 (folding) ...

  3. Linux 江湖系列阶段性总结

    引言 我使用 Linux 已经有很多年了,最开始接触 Linux 的时候是从 RedHat 9(没有 Enterprise),中途换过 N 个不同的发行版.多年前,我在 BlogJava 上面分享 J ...

  4. Linux应用环境

    转载Linux应用环境 阅读目录 引言 使用 Linux 的一些困难和解决方法 我眼中的Linux哲学总纲 我这一系列随笔中展现出的Linux哲学 Linux之得和Linux之失 总结 回到顶部 引言 ...

  5. [整理][LaTex]小技巧之——首行缩进

    0. 简介 在LaTex编辑时,有时会遇到这样一个有关于首行缩进的问题.在汉语环境的编辑下,习惯上每段会进行一个两个字的缩进.但是在默认编辑模式下,一个章节下的首段是没有首行缩进的,本文的目的主要是解 ...

  6. LaTeX 有哪些「新手须知」的内容?

    孟晨 ,在 LaTeX 话题下写错 LaTeX 名字的,一律… 陈硕等 137 人赞同 这是个好问题,虽然提问提得很大.不是很好答,权当抛砖引玉了. 天字第一号原则:不要到网上抄代码,尤其是似懂非懂的 ...

  7. LaTeX排版工具使用

    专业的论文,都是用Latex.CTex等相关的工具.那么,用word写论文,缺点在哪? latex 写的东西,最终要编译成pdf格式的.里面的格式,尤其是数学类符号等,比较漂亮.这是word不能比的. ...

  8. 美赛LaTeX急救指南

    目录 1 关于easymcm宏包的基本信息,以及编译系统的若干问题 2 图片.表格.数学公式.网址的处理 3 样式.字体字号.段落的设置 4 目录.交叉引用的相关问题 关于标题不能换行的问题:这里有解 ...

  9. LaTex 小技巧

    首行缩进 参考:小技巧之--首行缩进 %-------------------------------------------------------------------------------- ...

随机推荐

  1. 【.net 深呼吸】细说CodeDom(4):类型定义

    上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...

  2. 对抗假人 —— 前后端结合的 WAF

    前言 之前介绍了一些前后端结合的中间人攻击方案.由于 Web 程序的特殊性,前端脚本的参与能大幅弥补后端的不足,从而达到传统难以实现的效果. 攻防本为一体,既然能用于攻击,类似的思路同样也可用于防御. ...

  3. Partition:分区切换(Switch)

    在SQL Server中,对超级大表做数据归档,使用select和delete命令是十分耗费CPU时间和Disk空间的,SQL Server必须记录相应数量的事务日志,而使用switch操作归档分区表 ...

  4. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  5. 按需加载.js .css文件

    首先,理解按需加载当你需要用到某个js里面的函数什么鬼,或者某个css里的样式的时候你才开始加载这个文件. 然后是怎样实现的,简单来说就是在js中动态的createElem<script> ...

  6. Word/Excel 在线预览

    前言 近日项目中做到一个功能,需要上传附件后能够在线预览.之前也没做过这类似的,于是乎就查找了相关资料,.net实现Office文件预览大概有这几种方式: ① 使用Microsoft的Office组件 ...

  7. Jvm 内存浅析 及 GC个人学习总结

    从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...

  8. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  9. PHP设计模式(五)建造者模式(Builder For PHP)

    建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式. 设计场景: 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,爱好等信息,才能获得用 ...

  10. BI分析受阻?FineBI推出SPA螺旋式分析新功能!

    过去,企业级的数据分析通常会有这么几种场景,业务部门托信息部门分析数据,结果报表一出,唇枪舌剑争论你我高低,数据不准,指标不对.信息部门欠缺业务概念,业务部门不懂技术逻辑,数据分析之路,暂时搁浅. 后 ...