![Arabluatex 宏的扩展不起作用](https://linux22.com/image/357332/Arabluatex%20%E5%AE%8F%E7%9A%84%E6%89%A9%E5%B1%95%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我与 ArabLuatex 合作编辑一本阿拉伯语学术文本。
在我的阿拉伯语文本中,我想区分完全发声的片段和很少发声的文本块。我希望用另一种颜色标记这些片段。
当我将以 开头的说明\RL
直接放在文本中时,片段会被正确地着色和发声。
但是,当我将代码放入宏中时,片段是彩色的,但voc
或fullvoc
指令不起作用。
有人有解决办法吗?
下面是一个最小的例子(用 lualatex 处理)。
\documentclass[12pt,a4paper]{book}
\usepackage{xcolor}
\usepackage{arabluatex}
\newfontfamily\arabicfont[Script=Arabic, Scale=1.35]{Scheherazade}
\setmainfont[Numbers=OldStyle]{Gentium Book Basic}
%\newcommand*{\trk}[1]{\LR{\textcolor{red}{1 #1} \arb[fullvoc]{2 #1}}}
%\newcommand{\trk}[1]{{{\color{red}{{#1}}}}}
\newcommand*{\trk}[1]{\LR{\textcolor{red}{\arb[fullvoc]{#1}}}}
%\newcommand*{\trk}[1]{\LR{\textcolor{red}{\arb[fullvoc]{#1}}}}
%\long\gdef\trk#1{\textcolor{red}{\arb[fullvoc]{#1}}}
\begin{document}
\begin{arab}[novoc]
'a_hAfu mina 'l-malik-i 'lla_dI ya.zlimu 'l-nAs-a
\RL{\textcolor{green}{\arb[fullvoc]{'a_hAfu mina 'l-malik-i 'lla_dI ya.zlimu 'l-nAs-a}}}
\trk{'a_hAfu mina 'l-malik-i 'lla_dI ya.zlimu 'l-nAs-a}
\end{arab}
\end{document}
答案1
嗯,这与 TeX 扩展机制无关,也与颜色命令无关。实际上,arabluatex
任何单参数命令都要求其参数中包含阿拉伯文本:有关更多信息,请参阅文档第 37 页第 10 节中列出的一般原则。
例如,如果您尝试创建这个简单的命令:\newcommand{\fvarabic}[1]{\arb[fullvoc]{#1}}
,然后在一个环境中使用它,它将始终产生非发声的阿拉伯语,因为它的参数在看到它之前novoc
已经被规则处理过。novoc
\fvarabic
我认为这更多的是一个特性而不是一个实际的错误;)
目前,作为一种解决方法,您可以在任何想要创建的新命令前加上前缀,\RL
以使其被接受为arabluatex
不仅在参数中运行阿拉伯语文本的命令,如下所示:
\newcommand{\RLtrk}[1]{\textcolor{red}{\arb[fullvoc]{#1}}}
这会起作用。
的下一个版本arabluatex
(将在几天后发布)将允许“声明”此类新命令,以便像、之类的命令arabluatex
一样处理它们。\RL
\LR
编辑 arabluatex 1.9 已发布几天后应该会在 CTAN 镜像中可用。\MkArbBreak
已添加一个新命令,允许“声明”要在阿拉伯语环境中插入的新命令(请参阅 v1.9 文档中的 10.1 第 39 页)。
答案2
不幸的是,Ulrike 的回应不起作用。红色文本中没有显示发声。
我找到了以下解决方案:
\newcommand{\trk}[1]{\RL{\textcolor{red}{\arb[fullvoc]{#1}}}}
\begin{luacode}
function trk_help ( s )
s = string.gsub ( s , "\\trk%b{}" , "\\RL{%0}" )
return s
end
luatexbase.add_to_callback ( "process_input_buffer", trk_help , "trk_help" )
\end{luacode}
但我不知道它为什么会起作用。