因此,我尝试编写以下示例文本,当我输入时\begin{hebrew} נְשִימָה \end{hebrew}
,其余所有文本都出错了。希腊语单词也出现了同样的问题。
“(anima anemos)是灵魂的化身,(Ψυχή)是心灵的化身,是灵魂的化身,是灵魂的化身(نَفَس)的化身。”
我知道序言有些错误,但我无法准确指出。这是序言,任何帮助都将不胜感激。
\documentclass[a4paper,11pt,twocolumn]{book}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\setmainlanguage{persian}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Arial}
\newfontfamily\greekfont[Script=Greek]{Arial}
\usepackage{color}
\usepackage{pdfpages}
\usepackage[dvipsnames]{xcolor}
\csname@twosidetrue\endcsname
\pagestyle{headings}
\usepackage[alwaysadjust]{paralist}
\usepackage{geometry}
\geometry{
a4paper,
total={170mm,257mm},
left=22mm,
top=22mm,
}
\usepackage{graphicx}%To insert images.
\usepackage[hidelinks]{hyperref}%To cross-reference accross the text.
\hypersetup{colorlinks=true,linkcolor=RubineRed,urlcolor=Maroon,citecolor=ForestGreen}%Determines the color of the hyperlink and urlcolorlink.
\usepackage[export]{adjustbox}
\newcommand\marginlabel[1]{\mbox{}\marginpar
{\raggedright\hspace{0pt}#1}}
\usepackage[xindy,acronym,nonumberlist=true]{glossaries}
\usepackage{makeidx}
\makeindex
\usepackage{xepersian}
\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{2}
\settextfont{XB Zar}
\defpersianfont\nast{X Davat}
\title{\nast{\Huge{}}}
\author{\nast{\huge{}}}
\date{\nast{}}
\begin{document}
لفظ (\lr{anima anemos}) در زبان لاتین، (\begin{greek}Ψυχή\end{greek}) \lr{psyché} یونانی، نَفْس در عربی و \begin{hebrew}נְשִימָה\end{hebrew} در عبری همگی به معنای دَم (نَفَس) آمده اند.
\begin{hebrew}נְשִימָה\end{hebrew}
\end{document}
答案1
我已经清理了您的示例,使其变得简洁,并且修复了所有内容,以便可以正确编译。以下是使用polyglossia
和xepersian
使用 XeLaTeX 的正确方法:
- 在使用 bidi 的包之前加载所有包(例如几何和颜色)。
- 定义您正在使用的所有其他语言,包括英语和希腊语(在
\setotherlanguages{hebrew, greek,english}
. - 对于需要字体的语言,定义字体。
- 使用
\textotherlanguage
(例如\textgreek
)用其他语言书写段落中间部分
固定MWE:
\documentclass[a4paper,11pt,twocolumn]{book}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\usepackage{geometry}
\usepackage{polyglossia}
\setmainlanguage{persian}
\setotherlanguages{hebrew,greek,english}
\newfontfamily\hebrewfont[Script=Hebrew]{Frank Ruehl CLM}
\newfontfamily\greekfont[Script=Greek]{Linux Libertine O}
\usepackage{xepersian}
\settextfont{XB Niloofar}
\defpersianfont\nast{X Davat}
\begin{document}
لفظ \textenglish{(anima anemos)} در زبان لاتین،(\textgreek{Ψυχή}) \textenglish{psyché} یونانی، نَفْس در عربی و \texthebrew{נְשִימָה} در عبری همگی به معنای دَم (نَفَس) آمده اند.
\end{document}
我使用的字体是 TeXLive 中提供的,但如果您使用的是 Windows 机器并使用 Ariel,那么效果也一样好。
答案2
这是在 LuaLaTeX 中工作的版本,没有明确的语言标记。(您必须巧妙地确定开始和结束标点符号是从左到右还是从右到左。)
\documentclass[a4paper,11pt,twocolumn]{book}
\usepackage[dvipsnames]{xcolor}
\usepackage[bidi=basic, layout=sectioning.tabular, nil]{babel}
\usepackage{unicode-math}
\usepackage{pdfpages}
\pagestyle{headings}
\usepackage[alwaysadjust]{paralist}
\usepackage{geometry}
\geometry{
a4paper,
total={170mm,257mm},
left=22mm,
top=22mm,
}
\usepackage{graphicx}%To insert images.
\usepackage[hidelinks]{hyperref}%To cross-reference accross the text.
\hypersetup{colorlinks=true,linkcolor=RubineRed,urlcolor=Maroon,citecolor=ForestGreen}%Determines the color of the hyperlink and urlcolorlink.
\usepackage[export]{adjustbox}
\newcommand\marginlabel[1]{\mbox{}\marginpar
{\raggedright\hspace{0pt}#1}}
\usepackage[xindy,acronym,nonumberlist=true]{glossaries}
\usepackage{makeidx}
\makeindex
\setcounter{tocdepth}{2}
\setcounter{secnumdepth}{2}
\babelprovide[import=fa, main, onchar=ids fonts]{persian}
\babelprovide[import=he, onchar=ids fonts]{hebrew}
\babelprovide[import=el-polyton, onchar=ids fonts]{greek}
\defaultfontfeatures{ Scale=MatchUppercase, Ligatures=TeX }
% XB Zar is available at: https://fontlibrary.org/en/font/xb-zar
% To get italics that slant right-to-left, change the Italic faces to Oblique.
% As LuaTeX has trouble parsing filenames with spaces, I load this family by
% its PostScript names.
\defaultfontfeatures[XBZar]{
BoldFont={*-Bold},
ItalicFont={*-Italic},
BoldItalicFont={*-BoldItalic}}
\defaultfontfeatures[LibertinusSerif]{
Ligatures=Common}
\babelfont{rm}
[Scale=1.0]{Libertinus Serif}
\babelfont[persian]{rm}
{XB Zar}
%\babelfont{sf}
% {Arial}
\begin{document}"لفظ (anima anemos) در زبان لاتین، (Ψυχή~(psyché یونانی، نَفْس در عربی و נְשִימָה در عبری همگی به معنای دَم (نَفَس) آمده اند``
\end{document}
如果需要,您还可以设置\babelfont{tt}
它们。(Arabic Latin Modern Fixed 是 TeX 的一种很好的固定宽度阿拉伯字体。Khaled Hosny 的 Libertinus Math 是一种可能适用于此处的 OpenType 数学字体,或者 STIX Two Math)。\setmathfont
如果您要包含第二语言中的多个孤立单词,您可能仍希望使用显式语言标记而不是自动检测。例如,在这里,引入连字符点来psy\-ché
改善第一行的过大单词间距会与双向算法发生冲突并产生错误的输出。
答案3
序言中有很多混乱的内容。由于软件包之间存在一些冲突,我无法编译您的代码。不要忽视错误。
此外,polyglossia
应该提供波斯语所需的功能,而无需加载xepersian
。您也不需要
\usepackage[utf8]{inputenc}
并将polyglossia
加载fontspec
我没有安装 Libertine,因此我使用了这个简化的序言:
\documentclass[a4paper,11pt,twocolumn]{book}
\usepackage{polyglossia}
\usepackage{libertine}
\setmainfont[Ligatures=TeX]{FreeSerif}
\setmainlanguage{persian}
\setotherlanguage{hebrew}
\setotherlanguage{greek} % ❶
\setotherlanguage{latin} % ❷
\newfontfamily\hebrewfont[Script=Hebrew]{Arial}
\newfontfamily\greekfont[Script=Greek]{Arial}
我添加了拉丁语和希腊语的语言定义。
然后我有了以下文件主体:
\begin{document}
لفظ (\textlatin{anima anemos}) در زبان لاتین، (\begin{greek}Ψυχή\end{greek}) \textlatin{psyché} یونانی، نَفْس در عربی و \begin{hebrew}נְשִימָה\end{hebrew} در عبری همگی به معنای دَم (نَفَس) آمده اند.
\begin{hebrew}נְשִימָה\end{hebrew}
\end{document}
(我使用了\textlatin
而不是\lr
因为 后者未由 定义polyglossia
)。输出为:
凭借我的少量拉丁语、较少的希腊语、消失的希伯来语和缺失的波斯语,这似乎是您输入的正确排版。