Latex筆記

Latex 3

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

函數與變量

將函數與變量分離,都是以\開頭。能夠在「命令」中使用下劃線區分單詞。github

函數

定義函數:<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>}... 的命令)。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)
  • 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 編程環境

在編寫宏包或文檔類時,@ 符號能夠被當成字母使用。

相關文章
相關標籤/搜索