创建文本方向测试(luatex)

创建文本方向测试(luatex)

使用 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}

在此处输入图片描述

相关内容