简短、正确的答案

简短、正确的答案

我尝试在 LaTeX 中使用typo-dir.luaConTeXt 发行版,但失败了。我搜索了所有上下文源,并添加了所有缺失的函数,但仍然无法正常工作。是否可以在 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:

Context 与 Latex 输出的比较

相关内容