专栏名称: LaTeX工作室
欢迎光临分享与学习LaTeX的王国
目录
相关文章推荐
51好读  ›  专栏  ›  LaTeX工作室

LaTeX3 入门之基础概念

LaTeX工作室  · 公众号  ·  · 2025-01-04 22:52

正文

点击👇 LaTeX工作室 关注公众号
精致美好科研生活 从 LaTeX 开始!


原文地址:https://zhuanlan.zhihu.com/p/10765530753

一、LaTeX3 与 expl3

背景

在 LaTeX2e 的基础之上开发一个 LaTeX 内核的第一步是解决底层系统是如何编程的。与目前混合使用 LaTeX 和 TeX 宏相比,LaTeX3 系统为控制 TeX 的所需的功能提供了它自己的一致接口。这样 LaTeX 程序员和用户就可以在不熟悉内核和 plain TeX 的内部性质的状态下,仍能有效地工作。

expl3 包

expl3 包为 LaTeX 提供了这个新的编程接口(又称 l3 编程)。为了使编程系统化,LaTeX3 使用了一些完全异于 LaTeX2e 或 plain TeX 的约定。

  1. 为所有命令(包括 TeX 原语)提供一致的命名方案;
  2. 将命令分类为 LaTeX 函数和 LaTeX 参数,并根据其功能将其划分为模块;
  3. 拥有一套控制参数展开的简单机制;
  4. 提供一组核心的 LaTeX 函数,足以处理队列、集合、堆栈、属性列表等编程结构;
  5. 一种 TeX 编程环境,如忽略所有空白。

二、引例

\documentclass{article}
% 新版本已经将 expl3 包合并到 LaTeX 内核中
% 所以不需要再单独加载,网上很多教程都是旧版本的内容
% \usepackage{expl3}
\begin{document}
\ExplSyntaxOn % 开启 expl3 模式
\cs_set:Npn \__my_command:n #1 { Hello, #1! } % 定义一个命令
\__my_command:n { LaTeX3 } % 使用命令,{ LaTeX3 }为参数
\ExplSyntaxOff % 关闭 expl3 模式
\end{document}

最新版本的 expl3 已经集成到 LaTeX2e 内核中的,所以不需要单独加载。但需要使用 \ExplSyntaxOn \ExplSyntaxOff 来开启和关闭 expl3 模式。

\cs_new:Npn \__my_command:n #1 { Hello, #1! } 是定义一个命令(函数)的语法。

\__my_command:n { LaTeX3} 是使用命令(函数)的语法。

三、函数、变量与模块

函数与变量

尽管 TeX 实际上是一个宏处理器,但根据 expl3 编程语言的约定,我们区分"函数"与"变量"。

函数可以有参数,它们可以展开或者执行。引例中 \cs_new:Npn 就是一个函数。它可以用来定义其它函数。

变量可以被赋值,它们可以在函数的参数中使用;它们不是直接使用,而是由函数来操纵(包括获取与设置)。变量应该总是在尝试赋值之前声明。

注,函数与变量是一个不准确的术语,并不是真正的函数与变量。这一条前期可以忽略,等理解后在深入理解。

模块

模块是 LaTeX3 中组织代码的基本单位。每个模块都包含相关的函数和变量,使代码更加结构化和易于维护。

例如:

  • str 字符串处理模块
  • box 盒子操作模块
  • fp 浮点数计算模块
  • tl 凭据表(Token List)模块

一个不严谨的理解,可以简单理解为模块就是宏包。

四、命名规则

LaTeX3 的命名规则是一套约定俗成的规则,用于区分函数、变量、私有函数与变量等。虽然它本身并不强制,但遵循它可以使代码更加清晰和易于维护。

基本命名规则

  1. LaTeX3 不使用“@”作为定义内部宏的“字母”。相反,在内部宏中使用“_”和“ : ”符号来提供结构;
  2. LaTeX3 的函数名称由三个组成部分: \\_:
  3. 变量名则有四个部分: \_\*_\*\_
  4. 所有名称的语法都包含和,它们都提供了命令的相关信息。这里的的作用类似轻量的命名空间。

引例中 \cs_new:Npn 的模块为 cs new 则是描述, Npn 则是参数说明。







请到「今天看啥」查看全文