我正在尝试使用 TeXstudio 和 XeLaTeX 用 LaTeX 写一篇文章,因为我用阿拉伯语写作。我在给方程式编号时遇到了问题。它看起来像这样:
方程的编号以)1(
而不是出现(1)
。
该文件的序言如下:
\documentclass[b5paper,12pt]{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{polyglossia}
\usepackage[LFE,LAE]{fontenc}
\usepackage{titlesec}
\usepackage{fmtcount}
\usepackage[margin=0.75in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{hypcap}
\usepackage[backend=biber,bibencoding=utf8,style=ieee]{biblatex}
\providecommand{\keywords}[1]{\textbf{\textit{الكلمات المفتاحية: }} #1}
%Language settings for polyglossia
\setmainlanguage{arabic}
\setotherlanguage{english}
\setmainfont{Simplified Arabic}
\newfontfamily\arabicfont[Script = Arabic]{Simplified Arabic}
\let\arabicfonttt\ttfamily
\setkeys{arabic}{numerals=maghrib,locale=mashriq,calendar=gregorian}
\renewcommand{\thesection}{\arabic{section}~}
\renewcommand{\thesubsection}{\thesection-~\arabic{subsection}~}
\renewcommand{\thesubsubsection}{\thesubsection-~\arabic{subsubsection}~}
\titleformat{\section}{\normalfont\normalsize\bfseries}{\thesection-~}{0.5em}{\normalfont\normalsize\bfseries}
\titleformat{\subsection}{\normalfont\normalsize\bfseries}{\thesubsection-~}{0.5em}{\normalfont\normalsize\bfseries}
\titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection-~}{0.5em}{\normalfont\normalsize\bfseries}
\DeclareDocumentCommand{\printbib}{o}{\printbibheading
\begin{english}
\providecommand*{\MakeUppercase}[1]{#1}
\printbibliography[heading=none]
\end{english}}
方程式为:
\begin{equation}
\label{equation:psnr}
PSNR=10\log_{10}{\frac{MAX^{2}}{\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\left[I(i,j)-K(i,j)\right]^{2}}}
\end{equation}
我尝试过amsmath
,但mathtools
没有成功,我尝试\csname @Latintrue\endcsname
在之后添加\thenewfontfamily
,但仍然没有成功
答案1
这里的基本问题是amsmath
尝试用默认语言阿拉伯语设置方程标签。混合拉丁字符和阿拉伯文字会使双向算法混乱。
如果您的阿拉伯字体不支持阿拉伯文字中的括号,那么您唯一会遇到的错误就是文件中隐藏的一条静默警告消息log
。这是几十年前的一个极其糟糕的设计决定,您至少可以在控制台中看到有关阿拉伯字体的警告消息(
,)
并通过添加命令替换默认的从左到右字体\tracinglostchars=2
。
有几个修复。
加载更好的阿拉伯字体
Khaled Hosny 的 Amiri 设置了括号,使其在阿拉伯语中正常工作。在这里,我加载了 Hosny 的 Libertinus 系列作为匹配的文本和数学字体。这会引入unicode-math
并加载 Libertinus Math 作为您的 OpenType 数学字体。如果您不想加载unicode-math
但希望字体匹配,您可以加载\usepackage{libertine}
和\usepackage[libertine]{newtxmath}
。
\documentclass[b5paper,12pt]{article}
\usepackage{mathtools}
\usepackage{graphicx}
\usepackage{polyglossia}
\usepackage{libertinus} % Or perhaps \usepackage[libertine]{newtxmath}
\usepackage{titlesec}
\usepackage{fmtcount}
\usepackage[margin=0.75in]{geometry}
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{hypcap}
\tracinglostchars=2 % Warn when a character is missing!
\usepackage[backend=biber,bibencoding=utf8,style=ieee]{biblatex}
\providecommand{\keywords}[1]{\textbf{\textit{الكلمات المفتاحية: }} #1}
%Language settings for polyglossia
\setmainlanguage{arabic}
\setotherlanguage{english}
\defaultfontfeatures{Scale=MatchLowercase}
\newfontfamily\arabicfont[Script = Arabic]{Amiri}
\newfontfamily\arabicfontsf[Script = Arabic]{Noto Sans Arabic}
\setkeys{arabic}{numerals=maghrib,locale=mashriq,calendar=gregorian}
\renewcommand{\thesection}{\arabic{section}~}
\renewcommand{\thesubsection}{\thesection-~\arabic{subsection}~}
\renewcommand{\thesubsubsection}{\thesubsection-~\arabic{subsubsection}~}
\titleformat{\section}{\normalfont\normalsize\bfseries}{\thesection-~}{0.5em}{\normalfont\normalsize\bfseries}
\titleformat{\subsection}{\normalfont\normalsize\bfseries}{\thesubsection-~}{0.5em}{\normalfont\normalsize\bfseries}
\titleformat{\subsubsection}{\normalfont\normalsize\bfseries}{\thesubsubsection-~}{0.5em}{\normalfont\normalsize\bfseries}
\DeclareDocumentCommand{\printbib}{o}{\printbibheading
\begin{english}
\providecommand*{\MakeUppercase}[1]{#1}
\printbibliography[heading=none]
\end{english}}
\begin{document}
\begin{equation}
\label{equation:psnr}
\mathrm{PSNR}=10\log_{10}{\frac{\mathrm{MAX}^{2}}{\frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}\left[I(i,j)-K(i,j)\right]^{2}}}
\end{equation}
\end{document}
我从序言中删除了一些过时或多余的软件包,例如fontenc
Unicode 模式。我还擅自对输出进行了轻微的调整
重新定义标签格式
该mathtools
软件包包含一个命令\newtagform
,您可以使用它来重新定义方程数字的格式。要以英文显示数字而不带括号,您可以声明
\newtagform{english}[\textenglish]%
{}%
{}
\usetagform{english}
如果您尝试在分隔符上使用\textenglish
或LTR
,它们仍然会以错误的方式显示,但您可以作为一种无法更改的字体的丑陋解决方法,显示)
为您的开幕分隔符,并(
作为您的结束定界符。
\newtagform{english}[\textenglish]%
{\textenglish{)}}%
{\textenglish{(}}
\usetagform{english}
将英语设置为默认语言
然后在文档开始时将当前语言切换为阿拉伯语。
附言
截至 2020 年,最新发行版修复了 Windows 10 中简体阿拉伯语的问题,但我仍然可以使用某些其他字体(例如 Noto Naskh Arabia)重现它。