AUCTeX
当我用阿拉伯语(Rt-to-Lt)书写时,如果我想保留设置的字体锁定,引号就会被反转(右边的引号在左边,反之亦然) 。
使用 AUCTeX 的 Emacs 编辑器
字体锁定在第一行是正确的,但在第二行不正确。但是第二行可以在阿拉伯语 PDF 中正确显示引文。
输出
因此,您可以看到第二行用阿拉伯语表达得正确。
我的试用代码可以解决这个问题
\documentclass[twoside=semi]{scrbook}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\newfontfamily\arabicfont[Script=Arabic,Ligatures=TeX]{Simplified Arabic}
\usepackage[style=arabic]{csquotes}
\DeclareQuoteStyle[quotes]{arabic}
{\textquotedblright}{\textquotedblleft}
{\textquoteright}{\textquoteleft}
\DeclareQuoteStyle[guillemets]{arabic}
{\guillemotright}{\guillemotleft}
{\guilsinglright}{\guilsinglleft}
\DeclareQuoteOption{arabic}
\DeclareQuoteAlias[quotes]{arabic}{arabic}
\begin{document}
هنا نص باللغة العربية ``داخل علامتي الاقتباس''.
هنا نص باللغة العربية "داخل علامتي الاقتباس``.
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
错误
ERROR: Package csquotes Error: Quote style not defined.
我想保持字体锁定(引号的字体化)设置不变,但从包内更改引号。我查阅了文档,但没有找到对阿拉伯语的支持,但可以为这种语言添加样式和变体。我尝试在名为“带有两个变体和csquotes
”的新样式中反转引号,但没有成功。我遗漏了什么?arabic
quotes
guillemets
笔记:
- csquotes 版本 5.1d
- 由 xetex 编译
答案1
我不懂阿拉伯语,所以我甚至不知道在这种情况下正确的引号是什么。
但我可以告诉你的是,该命令\DeclareQuoteOption
只能在配置文件中使用csquotes.cfg
。该文件可以包含新选项,然后包可以在加载时使用这些选项csquotes
。事实上,它csquotes
在处理其选项之前就被加载了。
因此,您必须在文档目录中创建一个同名文件,其中包含以下内容
\ProvidesFile{csquotes.cfg}
\DeclareQuoteStyle[quotes]{arabic}
{\textquotedblright}{\textquotedblleft}
{\textquoteright}{\textquoteleft}
\DeclareQuoteStyle[guillemets]{arabic}
{\guillemotright}{\guillemotleft}
{\guilsinglright}{\guilsinglleft}
\DeclareQuoteAlias[quotes]{arabic}{arabic}
\DeclareQuoteOption{arabic}
\endinput
此时,你的 MWE 可以简化为:
\documentclass[twoside=semi]{scrbook}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\newfontfamily\arabicfont[Script=Arabic,Ligatures=TeX]{Simplified Arabic}
\usepackage[style=arabic]{csquotes}
\begin{document}
هنا نص باللغة العربية ``داخل علامتي الاقتباس''.
هنا نص باللغة العربية "داخل علامتي الاقتباس``.
هنا نص باللغة العربية \enquote{داخل علامتي الاقتباس}.
\end{document}
它的输出如下:
的输出\enquote
似乎是您所期望的。
如果需要,你可以添加
\MakeOuterQuote{"}
在您的文档中并使用"
..."
作为您的引用。
梅威瑟:
\documentclass[twoside=semi]{scrbook}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\newfontfamily\arabicfont[Script=Arabic,Ligatures=TeX]{Simplified Arabic}
\usepackage[style=arabic]{csquotes}
\MakeOuterQuote{"}
\begin{document}
هنا نص باللغة العربية ``داخل علامتي الاقتباس''.
هنا نص باللغة العربية \enquote{داخل علامتي الاقتباس}.
هنا نص باللغة العربية "داخل علامتي الاقتباس".
\end{document}
输出与上面相同。
答案2
在多语言文档中使用引号非常复杂,因为显示引号的可能性不同("
、''
或<<
- 法语),此外还要考虑要使用的语言(Lt-to-Rt)或(Rt-to-Lt),它们将继承babel
或的值polyglossia
。另一方面,该csquotes
软件包提供了一种在一种风格的不同变体之间切换的无缝方式,但我认为它有一些限制,我在这里强调一下,这可能会引起开发人员的兴趣。最重要的是,保留编辑器的字体锁(Emacs + AUCTeX)以增强脚本的可读性,这使得这项任务更加艰巨。所以有两个主要参与者(csquotes
和编辑器的字体锁)相互作用以给你所需的效果,我将展示我最好的折衷方案来满足两者。我愿意接受各种建议。
考虑使用 Ar-En 的 MWE
\documentclass[twoside=semi]{scrbook}
\usepackage{polyglossia}
\setmainlanguage[numerals=mashriq,abjadjimnotail=true]{arabic}
\setotherlanguages{english}
\newfontfamily\englishfont{Linux Libertine}
\newfontfamily\arabicfont[Script=Arabic,Ligatures=TeX]{Simplified Arabic}
\usepackage[arabic=guillemets,english=guillemets]{csquotes}
\MakeAutoQuote{«}{»}
\begin{document}
هذا نص باللغة العربية «خارج «داخل» الاقتباس».
هذا نص باللغة العربية \enquote{خارج \enquote{داخل} الاقتباس}.
\begin{english}
This is English text «outer «inner» quotations».
This is English text \enquote{outer \enquote{inner} quotations}.
\end{english}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
笔记:
- 阿拉伯语是 Rt-to-Lt,就像希伯来语和波斯语一样,而英语是 Lt-to-Rt
- 正如您所见,
\enquote{}
如果用 Rt-to-Lt 书写,那么这是一个坏主意。 csquotes
包中未附带arabic
样式,必须在csquotes.cfg
文件中定义(见下文)\MakeAutoQuote{«}{»}
有很多优点(见:https://tex.stackexchange.com/a/39292/26295)\MakeOuterQuote{"}
这比单独使用字体锁定会让您头疼的这款无与伦比的单品更好"
在那里看到https://emacs.stackexchange.com/q/7942/2443- 要键入
«
和,请分别»
按C-x 8 <
和C-x 8 >
。
字体锁定代码.init
(font-lock-add-keywords 'latex-mode (list (list "\\(«\\(.+?\\|\n\\)\\)\\(+?\\)\\(»\\)" '(1 'font-latex-string-face t) '(2 'font-latex-string-face t) '(3 'font-latex-string-face t))))
定义代码csquotes.cfg
在我的 Windows 机器上,此文件位于以下路径:
c:/texlive/2014/texmf-dist/tex/latex/csquotes/csquotes.cfg
\ProvidesFile{csquotes.cfg} % already in the file
% Put your definitions here.
\DeclareQuoteStyle[quotes]{arabic}
{\textquotedblright}{\textquotedblleft}
{\textquoteright}{\textquoteleft}
\DeclareQuoteStyle[guillemets]{arabic}
{\guillemotleft}{\guillemotright}
{\guilsinglleft}{\guilsinglright}
\DeclareQuoteStyle[guillemets]{english}
{\guillemotright}{\guillemotleft}
{\guilsinglright}{\guilsinglleft}
\DeclareQuoteAlias[quotes]{arabic}{arabic}
\DeclareQuoteOption{arabic}
\endinput % already in the file check by yourself
带 guillemet 的输出
注意:请参阅添加并反转英语样式的 guillemets 变体以匹配文档的主要语言(阿拉伯语)。但是,这对引号不起作用!知道为什么吗?我选择 Ar 和 En 的 guillemets 变体的主要原因。
要尝试引用,请在 MWE 中更改一行:
\usepackage[arabic=quotes]{csquotes}
带引号的输出
注意:阿拉伯语的引文很好,但对于英语来说却是倒置的。如果我将文件中的定义倒置.cfg
为阿拉伯风格,我将得到正确的英语引文,但对于阿拉伯语来说却是倒置的。这是与 guillemets 的主要不同之处,后者往往与两种语言更加一致,如果有人知道为什么csquotes
包中会出现如此令人费解的行为,我会非常感兴趣 --- 显然是一种限制。
结论
事实证明,使用引号代替引号是一种很好的策略,可以使两种语言的引用行为保持一致,并且它们不会像使用 when 那样干扰 Rt-to-Lt 文本,而且它们可以轻松 \enquote
锁定字体(见下文)。AUCTeX