使用 luatex 可以\textdir
改变文本方向并tex.textdir
提供代表文本方向的字符串。
我已经创建了这个宏来测试文本方向,它应该提供TLT
从左到右的上下文和TRT
从右到左的上下文,但我的宏没有给出预期的结果
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Script=Arabic]{Amiri}
\edef\dir{TLT}
\def\testdir{\directlua{tex.print(tex.textdir)}}
\def\foo{\ifx\dir\testdir TLT \else TRT \fi}
\begin{document}
%\textdir TRT
\foo ; \directlua{tex.print(tex.textdir)}
\end{document}
答案1
\ifx
仅有的看起来在第一级扩展中比较两个控制序列并且不能比较字符串。
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Script=Arabic]{Amiri}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\ifdirTLT}{mm}
{
\str_if_eq:eeTF { TLT } { \lua_now:n { tex.print(tex.textdir) } }
{ #1 }
{ #2 }
}
\ExplSyntaxOff
\begin{document}
\textdir TLT
\ifdirTLT{TLT}{TRT}; \directlua{tex.print(tex.textdir)}
\textdir TRT
\ifdirTLT{TLT}{TRT}; \directlua{tex.print(tex.textdir)}
\end{document}
答案2
测试前需要先扩展 \directlua。例如
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Script=Arabic]{Amiri}
\ExplSyntaxOn
\cs_generate_variant:Nn\tl_if_eq:nnTF {xn}
\def\foo{\tl_if_eq:xnTF{\directlua{tex.print(tex.textdir)}}{TLT}{TLT}{TRT}}
\ExplSyntaxOff
\begin{document}
%
\foo ; \directlua{tex.print(tex.textdir)}
\textdir TRT
\foo ; \directlua{tex.print(tex.textdir)}
\end{document}