在 AUCTeX Emacs 中使用 csquotes 包使用多语言引号的最佳方法

在 AUCTeX Emacs 中使用 csquotes 包使用多语言引号的最佳方法

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”的新样式中反转引号,但没有成功。我遗漏了什么?arabicquotesguillemets

笔记:

  • 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

在此处输入图片描述

相关内容