虽然我总是使用 LuaLaTeX 来编译我的文档,但我并不真正使用Lua经常这样。有时我甚至会忘记它。
在我的上一篇文档中,我使用它编写了一个随机单词生成器,它可以从单词池中挑选一个单词。这在许多不同的文档和情况下都非常有用。我在另一个问题中想出了这个代码,但如果有人想使用它,我会在这里重新发布它。
所以今天我问自己,Lua 在 TeX 文档中还有哪些其他好用途?现在轮到你发表你的想法了。
感谢大家的精彩回答。其中有一些很棒的想法,我当然可以在自己的文档中好好利用它们(我想其他用户也一样 :) )。在我看来,每个答案都值得打勾,所以我想我会让社区决定并选择获得最多赞成票的答案。
当然,这并不意味着你必须停止发布你的绝妙想法;)
答案1
LaTeX 无法完成您可能想要排版的所有事情。有时您可能需要另一种(脚本)语言的强大功能。您可以自由使用 Perl、PHP、bash 脚本或任何其他脚本。但 Lua 的主要优势非常简单 - 它可用。在所有受支持的平台上。用户无需安装任何其他东西!
在我的getmap
包中,我使用 Lua 脚本连接 Web 服务器来下载地图:
% compile with pdflatex -shell-escape
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{graphicx}
\usepackage{filecontents}
% use overwrite while optimizing the image
\usepackage[overwrite,mode=gm]{getmap}
\begin{document}
\begin{filecontents*}{berlin.epl}
&path=weight:5|color:purple|enc:_xq_IcgrpA?AFE@?^BFE@A^U@CLQXEZU?gCR?B?DBF@@?vA?D?D?BAHE@JBN@JLGFCG[DC~C?@?F?R?vA?p@iB@i@Fe@JWRSTOf@Gh@C^A?e@?gE?w@r@?lB@hA?`@??M?aA?]dI??O?O?Cn@cBfBeF|AeEHNVNBc@H@H_AEwA?OAMNA@N
\end{filecontents*}
\getmap[file=berlin, language=de, xsize=400, ysize=600,
markers={&markers=size:mid|label:H|color:green|Berlin, Hbf
&markers=label:B|color:blue|Brandenburger Tor, Berlin},
pathfile={berlin.epl}]{}
\includegraphics[width=6cm]{berlin}
\end{document}
该路线被导出到并gpx file
通过同一个 Lua 脚本转换为编码折线(Google 的路线格式):
getmapdl -m gpx2epl -G berlin.gpx
因此,从我的角度来看,嵌入Lua 解释器开辟新视野!
答案2
最新版本的 Tikz 支持使用 LuaTeX 自动进行图形布局。当给出适当的 TikZ 选项时,将调用一系列 Lua 脚本,这些脚本接收图形的结构并计算节点的位置。支持各种自动图形布局算法。手册中还记录了使用 Lua 编写自己的算法的 API。Lua 本身的运行时动态链接功能还支持 C/C++。
手册中的示例(注意layered layout
选项):
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.spaced,graphdrawing,graphs}
\usegdlibrary{layered}
\begin{document}
\tikz [nodes={text height=.7em, text depth=.2em,
draw=black!20, thick, fill=white, font=\footnotesize},
>=spaced stealth', rounded corners, semithick]
\graph [layered layout, level distance=1cm, sibling sep=.5em, sibling distance=1cm] {
"5th Edition" -> { "6th Edition", "PWB 1.0" };
"6th Edition" -> { "LSX" [>child anchor=45], "1 BSD", "Mini Unix", "Wollongong", "Interdata" };
"Interdata" -> { "Unix/TS 3.0", "PWB 2.0", "7th Edition" };
"7th Edition" -> { "8th Edition", "32V", "V7M", "Ultrix-11", "Xenix", "UniPlus+" };
"V7M" -> "Ultrix-11";
"8th Edition" -> "9th Edition";
"1 BSD" -> "2 BSD" -> "2.8 BSD" -> { "Ultrix-11", "2.9 BSD" };
"32V" -> "3 BSD" -> "4 BSD" -> "4.1 BSD" -> { "4.2 BSD", "2.8 BSD", "8th Edition" };
"4.2 BSD" -> { "4.3 BSD", "Ultrix-32" };
"PWB 1.0" -> { "PWB 1.2" -> "PWB 2.0", "USG 1.0" -> { "CB Unix 1", "USG 2.0" }};
"CB Unix 1" -> "CB Unix 2" -> "CB Unix 3" -> { "Unix/TS++", "PDP-11 Sys V" };
{ "USG 2.0" -> "USG 3.0", "PWB 2.0", "Unix/TS 1.0" } -> "Unix/TS 3.0";
{ "Unix/TS++", "CB Unix 3", "Unix/TS 3.0" } -> "TS 4.0" -> "System V.0" -> "System V.2" -> "System V.3";
};
\end{document}
答案3
LuaTeX 为 TeX 操作的内部提供了各种新接口。例如,段落构建算法已经以多种非常有用的方式开放。此功能可以创建新的软件包,这些软件包可以完成以前不可能完成的各种工作。
例如,塞尔诺利格包——对德语和英语文本进行选择性的印刷连字抑制,没有繁琐的手工标记或预处理器的运行——在很大程度上取决于各种 LuaTeX 回调来完成其工作。如果没有 LuaTeX,这个包根本就不存在。(完全披露:我是这个包的主要作者。)
答案4
认真对待这个问题,这里有一些来自 Context 来源的例子†:
- 新的书目系统最终取代了Bibtex。
- Web 服务器 该权力Pragma ADE 网站。
- 多用途寄存器 例如指数就是从中得出的。
- 各种解析器
CSV,
JSON
以及其他常见格式(针对
lualibs
包提供的Latex)。 - 完整的 XML 解析器,Context 卓越的 XML 支持的基础。
- 慢性肝病 ——除非你尝试,否则你不会相信它有多棒。另请参阅维基百科。
- SQL 接口。。
...还有很多!我鼓励你探索 Context 分布。特别是目录
tex/context/base/
scipts/context/lua
在 TEXMF 中。
†请注意,许多功能分布在多个文件中。在这些情况下,我仅链接了入口点/主文件。