Latex 3
https://stone-zeng.github.io/…
函数与变量
将函数与变量拆散,都是以 \
结尾。能够在“命令”中应用下划线辨别单词。
函数
定义函数:<module>_<description>:<arg-spec>
参数 <arg-spec> 由一串字母示意:
- 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}
{<true code>}
{<false code>}
int_if_even:nT
示意数字为偶数则执行 T
分支,否则什么也不做;int_if_even:nF
也是相似的。
变量
作用域(scope
)、模块名(module
)、形容(description
)以及变量类型(type
),<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)intarray
、fparray
:整型、浮点型数组(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 编程环境
在编写宏包或文档类时,@
符号能够被当成字母应用。