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)
  • 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 编程环境

在编写宏包或文档类时,@ 符号能够被当成字母应用。