用于创建从右到左书写格式的字典的工具

用于创建从右到左书写格式的字典的工具

我正在尝试使用阿拉伯文字排版一本词典。我想创建一个三列单词列表,右列阿拉伯单词向右对齐,波兰语翻译向左对齐,斜体转录向左对齐。这些列中都不会有很多文本。我可以用 来做,但\tabular在这种情况下我必须手动按字母顺序排序。我希望词典按阿拉伯单词排序。

我发现线程,它帮助我开始,但不幸的是我无法适应我的需求。最重要的问题是排序,因为我能够使用此代码的唯一方法是当列表按拉丁字母中的单词排序时。如果我无法获得第三列进行翻译,那么问题就小了。(好吧,去掉每行中的点也不错:))

第一当我编译这个时:

\documentclass[twocolumn]{article}
\usepackage{fontspec}
\usepackage{polyglossia}

\newcommand*{\glossaryname}{Dictionary}
\usepackage[nonumberlist,xindy]{glossaries}
\newcommand{\dictentry}[2]{%
 \newglossaryentry{#1}{name=#1,description={#2}}%
 \glslink{#1}{}%
 }


 \makeglossaries

\setmainlanguage{polish}
\setotherlanguage[locale=mashriq]{arabic}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.3,Mapping=arabicdigits]{Scheherazade}

\begin{document}
\dictentry{on}{\textarabic{هو}} %
\dictentry{ja}{\textarabic{انا}} %
\dictentry{pies}{\textarabic{كلب}} %

\printglossary[style=super]%
\end{document}

该词典按第一列(波兰语)排序。

第二 如果我切换参数(使翻译成为阿拉伯语单词的定义:)\dictentry{\textarabic{هو}}{on}%我会出现以下错误:

! Missing \endcsname inserted.
<to be read again> 
               \let 
l.23 \dictentry{\textarabic{هو}}{on}
                                  %
? 

第三 我也尝试将所有内容放入\begin{Arabic}环境中。然后排序正常,但在输出中,阿拉伯语单词的位置出现了一些黑色方块。

阅读文档后,我发现这makeindex是一个很好的工具,适用于拉丁字母和其他字母表xindy。在文档中发现xindy阿拉伯文字不受支持后,我在这个网站上也发现了以下线,因此看起来创建一个按阿拉伯单词排序的列表应该是可能的。

如果有其他更适合的工具,我不必用 来排版这本词典glossaries。目前我发现唯一可以用于阿拉伯语的排序工具是make index,但它会创建索引而不是词典。

编辑

由于我不知道问题可能出在哪里,所以我添加了一些可能(或不)相关信息。

我正在使用LaTeXOS X 10.8.2因为它看起来xindy不能只展示阿拉伯字体,但它能够按正确的顺序对其进行排序,我检查了/usr/local/texlive/2012/texmf/xindy/modules/lang/其中的内容,确实没有arabic。 第三次尝试排序仍然很好。(\begin{Arabic}环境的另一个问题是阿拉伯语列在输出的左侧,而不是右侧)。

编辑2

这里有一个pdf显示我的字典的一页,使用supertabular手动制作并排序。

答案1

glossaries可以使用包选项删除点nopostdotMissing \endcsname inserted错误是因为您尝试将其用作\textarabic{...}标签,但标签必须是纯文本。我没有安装所需的字体,因此无法完全测试它,但请尝试以下操作:

\documentclass[twocolumn]{article}
\usepackage{fontspec}
\usepackage{polyglossia}

\newcommand*{\glossaryname}{Dictionary}

\usepackage[nonumberlist,nopostdot,xindy]{glossaries}

\newcommand{\dictentry}[3][\dictlabel]{%
 \def\dictlabel{#2}%
 \newglossaryentry{#1}{name=#3,description={#2}}%
 \glsadd{#1}%
}


\makeglossaries

\setmainlanguage{polish}
\setotherlanguage[locale=mashriq]{arabic}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\newfontfamily\arabicfont[Script=Arabic,Scale=1.3,Mapping=arabicdigits]{Scheherazade}

\newglossarystyle{RLsuper}{%
  \glossarystyle{super}% base this style on 'super'
  \renewenvironment{theglossary}%
    {\tablehead{}\tabletail{}%
     \begin{supertabular}{ll}}% adjust column specifiers
    {\end{supertabular}}%
  % switch name and description columns:
  \renewcommand*{\glossaryentryfield}[5]{%
    \glsentryitem{##1}\glstarget{##1}{##3} & ##2\\}%
}


\begin{document}
\dictentry{on}{\textarabic{هو}}%
\dictentry{ja}{\textarabic{انا}}%
\dictentry{pies}{\textarabic{كلب}}%

\printglossary[style=RLsuper]%
\end{document}

这不仅会切换参数\dictentry,还会添加一个可用于覆盖默认标签的可选参数。

编辑:我添加了新样式的定义RLsuper。之所以使用双井号##,是因为这是一个宏定义中的宏定义。我调整了环境开始时的列说明符,supertabular因为样式使用的原始说明符super实际上并不适合双语词典。使用这种新样式,我删除了对位置列表和帖子描述终止符的引用,因此不再需要包选项nopostdot和。nonumberlist

相关内容