LaTeX 环境配置

文章发布时间:

最后更新时间:

相比大家都听过 的鼎鼎大名, 或者是 Markdown 里写公式用到过, 或是在别的地方进行公式和格式编辑时用到过, 其对于理工科生写作的意义无需赘述

其准确的格式描述解决了 WYSIWYG 的很多兼容性问题, 但也因其繁琐导致书写体验奇差, 不得不依靠各类写作环境

本文简单记录一下笔者如何在自己的设备(M1 MacBook Pro)上配置 的环境/工具并舒适地写作, 同时也给一些未来自己可能会需要的东西一个方便查询的地方

当然, 笔者也懂得非常少, 所以也就算学习笔记了

本文还在更新中

速查传送门

参考资料:

前期考察

笔者干什么事都喜欢有备而来, 实际上笔者上学期手写过很多 , 对很多基础概念稍有了解, 同时对于写 的一些基本痛点有一个比较完整的了解

这里贴一段 的区别

LaTeX is intended to provide a high-level, descriptive markup language that accesses the power of TeX in an easier way for writers. In essence, TeX handles the layout side, while LaTeX handles the content side for document processing. 来源

再加上笔者爱好收集各类信息, 早先调查过一些常用的 编辑器(我当然是说 Mac 上能用的)

都有各种各样的小毛病, 要不就是要钱, 要说的话感觉 TeXMaker 稍微好一些, 但作为一个爱折腾(有病)的笨比, 必然想要自己高度自定义, 于是傻乎乎拿 VS Code 写了很多

VS Code 的 LaTeX 初体验

VS Code 是好东西, 但万物皆有优缺点, 其轻便性的另一面就是作为工具的普适性, 这导致在完成特定繁杂任务时需要进行的调整(例如配置环境和习惯操作逻辑等)会多得难以想象

简单列一下吧, 常见的需求是生成 PDF 文件, 所以需要装渲染引擎, 但很难做到所见即所得(被自己的自负回旋镖击毙), 因此效率不高使用体验不佳

还得是 WYSIWYG 吧

同时由于各种操作常常需要大量配置(至少当时还比较年轻, 配置这些相当折磨且缓慢)

不过说起来现在有了 Copilot 好像竞争力有所回升, 主要就是一些写代码习惯的操作很舒适, 例如注释快捷键, 大括号换行等

写 LaTeX 的注意事项

心理准备

感觉最大的挑战就是在自己想写什么东西之前需要先搞懂这个东西到底是怎么回事, 在 中应该怎么实现, 但绝大部分文档又臭又长, 对于笔者而言最擅长的, 在文档中一阵乱翻来快速实现自己想要的功能而不需要知道细节, 这样的方便快捷省事的方法就不复存在了, 可谓是相当难受

不过着对于 来说好像也不那么奇怪, 毕竟是出了名的历史悠久的庞大粪坑项目

模板

这是在手写了大量 之后总结出来的, 那时还只会复制上一次写的文件全部内容再进行修改, 时常还会出现忘记改标题这种事故

笔者第一次大量需要用到 的场景是写实验报告, 那时候意识到了需要有一套模板来提高效率, 却因为各种原因一直无从下手

比较好的方法是针对自己的需求写一套 class 虽然写起来很难受, 但是万事从抄起步, 找好 Reference 随便找几个自己看得过去的就开始做赛博裁缝

LaTeX 的相关术语

放个图在这吧, 图里有 PostScript 是因为 的年纪比 PDF 要大得多

LaTeX_diagram

TeX

其实我也不太清楚, 看了下百科, 大概是一个图灵完备的, 设计来解决排版问题的语言, 还是把 Wiki 留在这吧

重点的话, 是一种系统, 一种语言(类似规范, 比如 C 语言)

LaTeX

同样, 写着一篇也不打算细讲这些, 还是丢个 Wiki 省事

我感觉 的关系比较像 C 和 C++ 的关系, 是用 macro 写的诶, 所以原理上讲任何 引擎都应该支持

XeTeX

小趣事: 笔者在使用 MacBook, 而 XeTeX 最初就是为 Mac OS X 开发的

比较重要的是支持了 Unicode 并且输入默认 UTF-8

个人感觉像一个拿别的语言重写的 C compiler, 是一个用来编译 的编译器, 大家都叫它引擎

安装 LaTeX 环境

笔者使用的是 Mac, 然后本来安装了 TeX Live, 但因为版本问题无法使用 tlmgr(TeX Live Manager) 安装宏包, 遂跟随指引前去下载 MacTeX 但环境乱七八糟, 总之先把原来的 TeX Live 通通删掉然后重新安装 MacTeX, 因为按照他的说法这会一并安装 TeX Live

CTAN 记得换源, 我是 TUNA 死忠粉

然后按理说会安装 xelatex, 然后我需要引入自己的 .cls 文件, 还要在 VSCode 里面配置好 env, 的 TEXINPUT


装完了, 我宣布这是完全的欺骗, 怎么删完了之后 MacTeX 给我装了个 2022 版本回来啊, 这样安装会报错

即刻转向 不推荐的 方式来更新, 有点难以接受这种文档什么也不写的东西

哈哈, 效果见下图

多少?

LaTeX 语法基础

是图灵完备的, 但是用于排版和描述内容等情形中这一点容易被忽略, 主要将两个部分分开了, 预设了一些好用的 stylemacro, 也就是别人的劳动成果, 并且改善了公式编辑

本节内容参考了 wikibooks 上的内容, 根据协议 CC BY-SA 4.0 获得授权

空格, 换行和段落

任何数量的连续空白字符, 单个换行, 空格, 制表符等, 会被处理为一个 space, 也就是看起来只空一格

但单独的一行或多行空行(内容只有空白字符)会被处理为一个段落分割, 后面的内容会新起一个段落

换行不会新起段落, 也就意味着不会有段首缩进, 可以用以下指令来实现

  • \\
  • \newline
  • \hfill \break

分组

程序员爱用大括号, 但在一篇文档中大括号通常不是到处都能用, 可以用 \bgroup{group_name}\egroup{group_name} 来当带名字的大括号用

环境和指令

中有两个非常常见的概念, 环境 (environment) 和指令 (command), 他们都以反斜杠 \ 开头, 具体的结构如下

环境:

1
2
3
\begin{environmentname}
text to be influenced
\end{environmentname}

其中环境本身相当于提供了一对带作用的大括号, 也就是内部形成了一个类似 分组 的结构, 称为语境 (scope, 这个翻译是我自己翻的, 可能不太准确哈), 同时环境并不常传递参数, 但传参形式与指令无异

指令 :

1
\commandname[option1,option2,...]{argument1}{argument2}...

中, 指令通常成对出现, 分别为文字参数指令和语境指令:

  • 文字参数指令: 将指令的目标文字作为参数传递
  • 语境指令: 又称切换指令, 作用于语境(分组或者环境)的剩余部分, 不建议到处乱用(尤其是没分好组/环境的情况下)

比如

1
2
3
4
\emph{emphasized text}, this part is normal % 文字参数指令
{\em emphasized text}, this part is normal % 效果同上, 使用了语境指令

\em emphasized text, this part is normal % 丑陋, 孺子不可教也

注释

写代码怎么能不知道注释怎么写呢?

但是这个注释会忽略掉这一行接下来的全部内容, 以及后面跟的换行符, 和换行符后面的空白字符

1
2
3
4
5
6
7
8
%!这是shebang
% 这是一段注释
sjfhsjfh! % 这样写也是可以的
% 下面两种写法是等价的
{sjfh% 这一行被忽略了, 还有这一行最后的换行和下一行前面的那些空格
sjfh}
% 就变成下面这样了
{sjfhsjfh}

LaTeX 速查手册

Reserved Characters - 保留字符

带特殊含义的字符

1
# $ % ^ & _ { } ~ \

部分情况下还有 []

需要在文档里面使用时需要进行转义

1
\# \$ \% \^{} \& \_ \{ \} \~{} \textbackslash{}

其中反斜杠 \ 在数学模式下转义应当使用 \backslash

同时可能产生问题的 ASCII 字符还有 <>, 在部分字体编码中会显示为 ¡¿

可以使用 \textless\textgreater 来转义

文档结构

一个典型的 .tex 文件的结构

1
2
3
4
5
6
7
\documentclass[opt1, ...]{...} % 似乎是必须要有的, 选项参数可选
\usepackage[opt1, ...]{pkg1, pkg2, ...} % 可选
% 序言(preamble)部分, 一般会写影响整个文章的一些指令
\begin{document} % 同样是不可缺少的
% 正文部分
\end{document}
% 注释部分(我觉得拿这个地方藏东西写注释什么的还是比较混沌邪恶)

内置文档类

给大家提供了一些(嗯)内置的文档类 (document class), 如下(我抄的 wikibook):

  • article: 文章, 发刊物, 小型报告/pre, 项目文档, 请柬(?)等
  • IEEEtran: IEEE 破事就是多
  • proc: 大约是程序记录(比如会议记录什么的? 笔者也不太懂)
  • minimal: 一般是用来测试的, 如字面意思一般, 只设置页面大小和提供一个基础字体
  • report: 比 article 长, 比 book
  • book: 大部头
  • slides: 幻灯片, 字体是大号无衬线字体(有点像黑体)
  • memoir: 花里胡哨的book [ref]
  • letter: 手纸(てがみ)
  • beamer: pre 用的 (参考 LaTeX/Presentations).

大表在此处

文档参数

  • 10pt, 11pt, 12pt: 主字体大小设置, 默认 10pt
  • a4paper, letterpaper,...: 纸张大小. 原理上讲默认 letterpaper, 但很多欧洲的 引擎, 以及 pdfLaTeX 默认 A4. 还可以指定 a5paper, b5paper, executivepaper, legalpaper
  • fleqn: 公式左对齐(默认居中)
  • leqno: 公式编号放在左边(默认右边)
  • titlepage, notitlepage: 标题是否单独成页, article 默认否, report, book 默认是
  • twocolumn: 两列排版(就是刊物上最常见的那种), 当然可以选 onecolumn, 不过这是默认的
  • twoside, oneside: 单双面设置, 这只是文档的格式, 打印的时候还得另外设置. articlereport 默认单面, book 默认双面
  • landscape: 改变为横向列印
  • openright, openany: 控制章节首页出现的位置. 对 article 无效, 章节都没有的东西. report 默认是 openany, 也就是找到下一个可用页面就放, book 则默认为 openright, 要在右手侧
  • draft, final: 默认 final. draft 会让 指出连字符和排版问题(输出之后有问题的行的右侧边上会有个小正方形), 而且还偷懒了图片, 画个框不画内容省事, 很符合我对 draft 的想象

TBD2023-09-16 07:56:062023-09-16 08:07:43