Latex笔记

Latex 3

https://stone-zeng.github.io/...

函数与变量

将函数与变量分离,都是以\开头。可以在“命令”中使用下划线区分单词。

函数

定义函数:_:
参数由一串字母表示:

  • n,普通(normal)参数,即{..}所包围的标准宏参数。
  • N,单个参数,例如一个控制序列或者一个字符。
  • p,原始 TEX 的形参(parameter)指定,即#1#2等。
  • T、F,分支条件。此外,还有D表示不要使用,W表示特例。

例子:

% LaTeX2ε
\def\myfunc#1{Hello #1}
% LaTeX3
\cs_new:Npn \my_func:n #1 { Hello~ #1 }

def 不同的是,cs_new:Npn 会做重复定义检查。因而 cs_new:Npn 的实际效果其实更接近 LATEX 2ε 中的 newcommand,只是参数形式更加灵活(newcommand 只能定义不带参数,或者参数形如 [<可选参数>]{<必选参数 1>}... 的命令)。

int_if_even:nTF:它属于 int 模块,用于处理整数。这一函数的作用是判断一个数字(由 n 参数接受)是不是偶数,若是,则执行 T 分支,否则执行 F 分支。

int_if_even:nTF { 12 }
  {   }
  {  }

int_if_even:nT 表示数字为偶数则执行 T 分支,否则什么也不做;int_if_even:nF 也是类似的。

变量

作用域(scope)、模块名(module)、描述(description)以及变量类型(type),___,没有冒号。
作用域有三个,分别时c常数、g全局变量、l局部变量。

例子:

% 声明变量
int_new:N l_my_variable_int
int_new:N g_my_variable_int
% 查看变量的值
int_show:N l_my_variable_int % => 0
int_show:N g_my_variable_int % => 0
% 开启一个分组
{
  % 赋值
  int_set:Nn  l_my_variable_int { 1 }
  int_gset:Nn g_my_variable_int { 1 }
  % 查看变量的值
  int_show:N l_my_variable_int % => 1
  int_show:N g_my_variable_int % => 1
}
int_show:N l_my_variable_int % => 0
int_show:N g_my_variable_int % => 1

变量类型,又被称为寄存器,

  • box,盒子变量
  • int <– count (integer),计数器,相当于整型变量
  • dim <– dimen,刚性长度(dimension)
  • skip,弹性长度
  • muskip,数学弹性长度(skip in math unit)
  • fp:浮点数(floating points)
  • intarrayfparray:整型、浮点型数组(integer/floating point array
  • bool:布尔型变量
  • regex:正则表达式(regular expression)

私有

私有函数以两个下划线开头,如 __my_function:nn;私有变量则在作用域标记之后跟着两个下划线,如 l__my_variable_tl

LATEX3 提供了 l3docstrip 宏包,它在文学编程宏包 docstrip 的基础上引入了名字空间的手法。%<@@=myi>引入命名空间,@@代表__xx,然后使用\@@_就是使用的当前命名空间的函数或方法,最后使用%<@@=>关闭。

启用环境

documentclass{article}
usepackage{expl3}   % RequirePackage{expl3}

ExplSyntaxOn   % 开启 LaTeX3 编程环境
...
ExplSyntaxOff  % 关闭 LaTeX3 编程环境

在编写宏包或文档类时,@ 符号可以被当成字母使用。

你可能感兴趣的