我现在想在lualatex中写一个“小索引”。所有关键字内容都保证在之前出现,并且我不想使用外部文件。
我的开胃菜是:
\documentclass[12pt]{article}
\directlua{
dofile(kpse.find_file("l-lpeg.lua"))
dofile(kpse.find_file("util-sto.lua"))
dofile(kpse.find_file("util-prs.lua"))
}
\def\sort#1{%
\directlua{\unexpanded{
tex.sprint(
table.concat(
table.sorted(
utilities.parsers.settings_to_array([[#1]]) ) , "; " ) )
}}}
\begin{document}
\sort{c, {b,x}, d, a} %% works
% wanted:
% \addtosort{c}
% \addtosort{b,x}
% \addtosort{d}
% \addtosort{a}
% \printsorted
\end{document}
我现在正在考虑如何建立列表。我可以在 tex 中用类似下面的代码来做到这一点
\def\addkeyword#1{\g@addto@macro\mykeywords{{#1},}}$
然后大概会将其输入\mykeywords
到sort
。但我想知道 lualatex 应该怎么做。我应该尝试建立一个 lualatex 字符串吗?或者我应该/可以尝试建立一个 lua 数组,这样我就不需要将字符串解析为数组了?
谢谢您的建议。
答案1
我不太清楚你想如何解释b,x
这一点,只是把它当作一个字符串
每个条目被添加到一个表中,最后进行排序并将条目返回给 TeX。
\documentclass{article}
\def\addtosort#1{%
\directlua{
tbl=tbl or {}
table.insert(tbl,"\luaescapestring{#1}")
}}
\def\printsorted{%
\directlua{
table.sort(tbl)
for i,n in ipairs(tbl) do tex.write(n .. ', ') end
}}
\begin{document}
\addtosort{c}
\addtosort{b,x}
\addtosort{d}
\addtosort{a}
\printsorted
\end{document}