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_intint_new:N g_my_variable_int% 查看变量的值int_show:N l_my_variable_int % => 0int_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 % => 0int_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 编程环境
在编写宏包或文档类时,@
符号能够被当成字母应用。