我尝试在 LaTeX 中使用typo-dir.lua
ConTeXt 发行版,但失败了。我搜索了所有上下文源,并添加了所有缺失的函数,但仍然无法正常工作。是否可以在 LaTeX 中使用这个 Lua 文件?我只是想看看它在 LaTeX 中是如何工作的。
\documentclass{article}
\usepackage{fontspec}
\directlua{
require("typo-dir")
commands.setdirection(1)
}
\luatexpardir TRT
\luatextextdir TRT
\begin{document}
1984
\end{document}
编辑:使用@phg 的文件时,我收到以下错误:
./test-typo-dir.tex:4: LuaTeX error ...al/texlive/2013/texmf-dist/tex/context/ba
se/typo-dir.lua:48: attempt to index local 'mathcodes' (a nil value)
stack traceback:
...al/texlive/2013/texmf-dist/tex/context/base/typo-dir.lua:48: in main chunk
[C]: in function 'require'
./import-typo-dir.lua:172: in main chunk
[C]: in function 'require'
...xlive/2013/texmf-dist/tex/luatex/luatexbase/modutils.lua:57: in function 're
quire_module'
[string "\directlua "]:1: in main chunk.
\lltxb@requirelua ...xluaescapestring {#2}" \fi )}
l.4
?
答案1
简短、正确的答案
不要这样做。请使用 Context。代码与 Context 集成得太紧密,无法在 Context 之外实际使用。
(我知道这不是你的问题的真正答案,但它仍然是正确的。)
更长、更详细的答案
既然你问这有多难:如果你知道自己在做什么,我认为这是一项中等到困难的任务。如果你(不像我)已经熟悉 Unicode 双向算法,那么难度可能中等。要点如下:https://gist.github.com/phi-gamma/6488187包含必要的 Lua 代码以及一些示例包装器宏。它需要 Context 的 beta(不稳定)版本(Texlive 2013 中的版本太旧了),最方便的获取方法是安装独立分发。
在 Context 中,Unicode bidi 实现为节点处理器,这是 Luatex 回调的托管版本。通常,经过一些(就您而言:大量)准备,您可以将这些处理器中的任何一个挂接到原始回调机制中。有关这需要什么的概述,您可以参考 Luaotfload 采取的步骤,以便 加载上下文的字母间距代码。
typo-dir.lua
大量使用 Unicode 字符属性。Luaotfload 提供的字符信息不足以满足其目的,因此我们必须加载整个字符表 ( char-def.lua
)。此外, 也是char-ini.lua
必需的,因为它会安装一系列特殊处理程序,以方便访问这些属性。
更新2013 年 9 月 9 日,bidi 代码被拆分为typo-dir.lua
(节点处理器处理和接口)、typo-dha.lua
(主 bidi 节点处理器)和math-dir.lua
(数学 bidi)。要点已更新以反映这些变化。从源代码和最近的活动来看,不久的将来可能会有进一步的变化。
除此之外,还有几个进一步的先决条件:我们需要将 Context 的接口正确映射到 Luatex 属性上,并将其映射到 Luatexbase 上,并预分配三个包含双向状态的属性。此外,
context
命名空间
必须存在,所以我们设置了一个基本的替代方法,它同时支持__index
和__call
元方法。这些只是更复杂的要求。为了便于理解,我简要地注释了源代码。
我只针对
typo-dir.mkiv
。自动切换方向似乎有效。虽然我无法解释字体渲染的差异,但这不是你问的B-)
。它看起来是这样的——左边是 Latex,右边是 Context: