来自bidi
手册:
\if@Latin
在任何使用拉丁字体的环境中都是真实的,而在任何使用 RTL 字体的环境中都是错误的。
我有bidi
版本 20.0 和一个如下的简单示例:
\documentclass{article}
\usepackage{bidi}
\begin{document}
This is typeset by \textsf{bidi} package, \bidiversion, \bididate.
\makeatletter
\if@Latin yes \else no \fi
\makeatother
\end{document}
无法编译并产生错误:
! Undefined control sequence. l.6 \if@Latin
请注意,许多命令都依赖于此布尔测试,例如\lr
来自xepersian
包的命令。另一个不起作用的示例:
\documentclass{article}
\usepackage{xepersian}
\settextfont{Amiri}
\begin{document}
\lr{hello world}
\end{document}
答案1
我认为这个问题是由于测试名称的改变造成的,参考:https://github.com/vafa/bidi/blob/master/bidi.dtx
您会发现, 20.0 版本的手册中并未提及此更改\newif\if@nonlatin
,而且使用此布尔测试的软件包也没有做必要的更改。\newif\if@Latin
bidi
xepersian
随着 bidi 版本 20.0 的推出,MWE 变为:
\documentclass{article}
\usepackage{bidi}
\begin{document}
This is typeset by \textsf{bidi} package, \bidiversion, \bididate.
\makeatletter
\if@nonlatin no \else yes \fi
\makeatother
\end{document}
答案2
\if@Latin
(旧布尔值,现已删除)和\if@nonlatin
布尔值都是内部的,用户不应使用它们。相反,请使用和\iflatin
宏\ifnonlatin
:
\documentclass{article}
\usepackage{bidi}
\begin{document}
This is typeset by \textsf{bidi} package, \bidiversion, \bididate.
\iflatin{We are in latin mode}{We are not in latin mode}
\ifnonlatin{We are not in latin mode}{We are in latin mode}
\end{document}