https://stone-zeng.github.io/...git
將函數與變量分離,都是以\
開頭。能夠在「命令」中使用下劃線區分單詞。github
定義函數:<module>_<description>:<arg-spec>
參數<arg-spec>由一串字母表示:正則表達式
{..}
所包圍的標準宏參數。#1#2
等。例子:編程
% 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>}...
的命令)。c#
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局部變量。ui
例子:3d
% 聲明變量 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
變量類型,又被稱爲寄存器,code
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 編程環境
在編寫宏包或文檔類時,@
符號能夠被當成字母使用。