LaTeX 里如何定義 9 個參數以上的變數?
求個簡單的方法......
比如我要寫個123456789—abcdefghi怎麼樣讓1-9以及a-i全為變數?
謝謝!
已有的回答都非常好,我想提供一個非主流的方法。
documentclass{article}
usepackage{xparse}
ExplSyntaxOn
%% 以 STOP 為參數結束標誌,使用方式為 phonenum...STOP
NewDocumentCommand phonenum { u{ STOP } }
{
l_item:nn {#1} { 1 }
l_item:nn {#1} { 2 }
l_item:nn {#1} { 3 } ,
l_item:nn {#1} { 4 }
l_item:nn {#1} { 5 }
l_item:nn {#1} { 6 }
l_item:nn {#1} { 7 } ,
l_item:nn {#1} { 8 }
l_item:nn {#1} { 9 }
l_item:nn {#1} { 10 }
l_item:nn {#1} { 11 }
}
ExplSyntaxOff
egin{document}
phonenum 13641344123STOP
end{document}
用 l_item:nn{#1}{#2} 取出記號列表 #1 中的第 #2 個項目(單記號或者分組)。這裡使用了 LaTeX3,如果你看不慣,我們也可以改用 ltxcmds 宏包的 ltx@CarNumth。
documentclass{article}
usepackage{ltxcmds}
makeatletter
defphonenum#1STOP{%
ltx@CarNumth{1}#1@nil
ltx@CarNumth{2}#1@nil
ltx@CarNumth{3}#1@nil,%
ltx@CarNumth{4}#1@nil
ltx@CarNumth{5}#1@nil
ltx@CarNumth{6}#1@nil
ltx@CarNumth{7}#1@nil,%
ltx@CarNumth{8}#1@nil
ltx@CarNumth{9}#1@nil
ltx@CarNumth{10}#1@nil
ltx@CarNumth{11}#1@nil}
makeatother
egin{document}
phonenum 13641344123STOP
end{document}
我才不會告訴你,ltxcmds 用了黑科技且不處理異常,在效率上,ltx@CarNumth 要比 l_item:nn 要高很多,並且不依賴 eTeX。你有興趣可以去看一下源代碼。
有多種迂迴的辦法。直接的辦法是拆開來:
deffoo#1#2#3#4#5#6#7#8#9{%
保存 #1 到 #9 到宏
foocontinue}
deffoocontinue#1#2{%
使用前面保存的宏表示前 9 個參數
#1 是第 10 個,#2 是第 11 個}
但定義如此多參數是非常奇怪的用法,基本上我想不出什麼有合適的應用場景——所以並不建議這樣做。
如果每個參數的意義都相同,只是需要逐個處理,那應該用循環的方式逐個處理。比如說使用 LaTeX2e 內核的 @tfor。當然這類工具非常多,LaTeX2e 內核還有處理逗號列表的 @for,宏包 etoolbox、expl3 等也都有很多這種針對列表的操作工具。這裡只對 @tfor 舉一個例子:documentclass{article}
makeatletter
defmakeparens#1{%
@tfor mp:=#1do{%
( mp)}}
makeatother
egin{document}
makeparens{1234567890abcdef{xxx}{yyy}}
end{document}
documentclass{article}
usepackage{keyval}
makeatletter
% 定義 text 族的 emph 選項,控制 emph 命令的定義
let ext@emph=emph
define@key{text}{emph}[ ext@emph]{%
letemph=#1}
ewcommandsettext[1]{%
setkeys{text}{#1}}
makeatother
egin{document}
settext{emph= extbf} % 粗體
An emph{important} example.
settext{emph} % 默認的格式
An emph{important} example.
end{document}
這個例子只給 settext 定義了一個參數 emph。但可以增加任意多的參數。
推薦閱讀:
※如何並排擺放一個tikzpicture和一個tabular,使得其底端在一條水平線上?
※LateX 生成的辭彙表 辭彙與其解釋間均如何控制?
※請問這個TeX Live的依賴關係是什麼呀?
※LaTeX 怎麼禁止標題在目錄中的折行?
※為什麼 LaTeX 的命令以不便盲打的反斜桿開始?
TAG:LaTeX |