我正在设置一些包含动态文本的文档。基本上,LaTeX 是一种视图机制,用于动态呈现数据库上正在进行的统计分析的结果。因此,我有许多\ifnum
s 和\newif
s,它们由 Sweave 提供,其中包含 R 块和 Rnw 文件中计算出的值。
尽管 LaTeX if else 结构可以工作,但 tex.se 上发布的 LuaTex 示例看起来更加优雅且更易于调试,因此我更愿意采用这种方式。尤其是当我有多个嵌套时,我有时很难确定错误发生的原因。
我当然会问 LuaTeX 和 LuaLaTex 本身的优缺点。这里有一些很棒的帖子已经讨论过了我确实需要一些论据来建议将部分或全部报告切换到 LuaTex。立即得到的回复是“LuaTex 仍处于测试阶段,并且还会持续一段时间”。但是作者认为它足够稳定:
主要版本(x.x0 版本)足够稳定,可以用于生产工作
您能用经验验证这一点吗?除了新版 LuaTex/LuaLaTex 发布时可能需要重构之外,还有其他风险吗?从排版角度来看,我正在处理的文档相对简单,而且我只使用标准文档类。此外,一旦准备好,模板就不太可能发生太大变化。
我意识到对于 pdflatex 我完全认为有些事情是理所当然的,我的问题可以缩小到这是否已经适用于(根据您的经验)lualatex:
- 同时启动多个 pdflatex 进程从未导致任何麻烦。
- 一旦 (Rnw --> Sweave --> tex) 模板运行(已经过测试、调试并投入生产)我就再也不需要看它了(除了 R 包中的一些更新,但这绝对与此无关)。
topskip 已经给了我一个提示:了解当前测试版的局限性,必要时绕过它,并在更新时小心谨慎。我对此的解释如下:从成本与收益的角度看,现在编程会更容易,但以后维护成本可能会更高(但很可能不会)。
沿着这个思路,您还有什么经验可以分享吗?
更新 - 将我从 pdflatex 切换到 lualatex 的笔记移至下面的答案。问题太长了,无法继续
答案1
是的。我与客户合作过两个项目,我们从 XeTeX 切换到 LuaTeX(因为图像包含问题,现在 XeTeX 已经修复),现在运行了一年多,没有出现问题(仍在使用 TL2012)。当然,如果您的业务依赖于 LuaTeX,您需要考虑如何获得专业支持。
它绝对可以投入生产;几年前,我出于个人用途从 pdfTeX 切换到 luaTeX。但如果需要,我可以自己修复 LuaTeX 中的错误。:-)
答案2
我使用 LuaTeX 谋生已有几年了,所以我认为 LuaTeX 已经可以用于生产环境了。但这并不意味着它没有错误,或者你可以毫无顾忌地使用它。
我仍在使用较旧的 LuaTeX 版本,并且从未更改过环境,因此我的设置非常稳定。(至少)我当前的二进制文件(0.71.0)中有一个烦人的错误,我有点难以解决它,但没关系。
如果您定期更新,可能会遇到麻烦。LuaTeX 会改变,Lua 会改变,用户空间会改变更多。如果您的文档不依赖于其中任何最秘密的功能,那么多年来您很可能不会注意到任何差异。
所以答案是“这取决于您的个人需求”,因此我认为这个问题与主题无关;)
答案3
是的,它看起来已经完全可以投入生产了,但是性能成本却很高。
在测试环境中使用 LuaLatex 一段时间后,我发现它有很多优点,而且我还没有遇到任何 bug,所以我最终选择了 Martin 的肯定回答。不过,我想说明一下我个人的一些需求。如果您正在决定是否将 LuaLaTex 纳入您的工作流程,这可能会有所帮助。
1. 迁移
迁移到 LuaTex 很容易,并且有据可查,只需要对布局(相对)像我的一样简单的文档进行微小的更改。
掌握 Lua 语言并不需要花费太多时间,一旦你弄清楚了不同的Lua 环境您已经基本准备好了。这意味着重写文档非常快。的极少数特点tex.print
都已记录在案,因此不需要很长时间就能弄清楚。
另一个特点是,你可以使用 Sweave 将 R 值传递到 Luacode 环境。事实证明,在 lua 环境中评估 \Sexpr{} 是完全可能的。诀窍是确保使用 luacode 并使用lua 中的tostring
和函数。tonumber
\begin{luacode}
local mystring = tostring(\Sexpr{df[3,c("TextColumn")]})
local myinteger = tonumber(\Sexpr{df[3,c("NumberColumn")]})
end
\end{luacode}
tostring
和等表达式tonumber
是少数需要花费力气才能在 de 文档中找到的表达式之一。其余的都是相当标准的语法。
因为迁移涉及到删除包,所以inputenc
Sweave 需要使用 utf8 编码选项来调用,否则它将无法识别编码:
R CMD Sweave --encoding='utf8' testluatex.Rnw
2. 性能
这才是真正需要付出代价的地方。我的测试文档包含许多嵌套的 if-then 块,使用 转换为 pdf 需要 0.28 秒,pdflatex
而使用 则需要整整 1.45 秒lualatex
。将字体改回使用 pdffonts(通过 fontspec 使用 uarial 而不是 Arial)可以稍微加快一点速度(1.32 秒),但不会加快太多。
性能仍然落后于 LuaTex 的同类产品这一点也是有据可查的。我只是不知道预期的性能损失会有多大。
3. 编码和可维护性
当您处理包含动态内容的报告时,使用 luacode 而不是 tex 确实是一种新鲜的体验。与 tex 相比,luacode 的读取和调试速度肯定要快得多。
性能恰好是我们决策中的重要因素,遗憾的是编码优势尚未超过性能成本。但性能可能与您无关,在这种情况下,优势是巨大的。