我在一本用阿拉伯语(一种从右到左的语言)编写的书的末尾制作了两本技术术语词典及其英文版,使用词汇表包,一本词典按阿拉伯语(编号)条目排序,另一本按英文条目排序。
我想将由\gls
定义的命令的输出设置\defglsentryfmt
为词汇表中的编号(如果之前使用过)和脚注中的英文翻译(如果第一次使用)。如果条目位于框中(例如 tcolorbox 生成的框中,则不会生成脚注),则这些命令在其他情况下都有效...
我找到了解决这个问题的方法(似乎是!),通过使用命令\ifglsused
,在一个特殊的用法中...在每个框之前,我设置一个测试编号,\TestGlossNumber
为 1,以表明词汇表条目将在框中使用,我在框之后立即调用它,然后我将\gls
条件下条目的输出放在命令{\TestGlossNumber=1}
中\ifglsused
,然后在框之后,我将 \TestGlossNumber 调用为 0,以保持正常条件。
以下是使用的 .tex 文件:
\documentclass{article}
\usepackage{multicol} % Multi-columning
\usepackage[most]{tcolorbox} %So called package for boxing and so...
\newtcolorbox{mybox}[1][]{enhanced,left=5pt,right=5pt,oversize,colframe=black,colback=white,boxrule=.5pt,breakable,
before=\par\smallskip\centering,width=\textwidth,arc=0pt,outer arc=0pt,#1}%
\usepackage[entrycounter,nomain,nonumberlist,toc,section=section]{glossaries}
\usepackage{glossary-mcols}
%%%%%%%%%%%%%% Arabic Commands and fonts
\usepackage{polyglossia}
\setmainlanguage[numerals=maghrib]{arabic}
\setotherlanguage{english}
\setmainfont[Script=Arabic,Scale=1.2]{Arial}
\newfontfamily\englishfont[Scale=1]{Times New Roman}
\setmonofont{Courier New}
\let\arabicfonttt\ttfamily
\setsansfont[Script=Arabic,Scale=1.5]{Arial}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Horizontal english LTR footnotes with the manyfoot package
\usepackage[perpage,para*]{manyfoot}
\textwidthfootnoterule
%%%%%%%%%%%% ENGLISH LTR
\SetFootnoteHook{\setLTR}
\DeclareNewFootnote[para]{C}
\makeatletter
\let\c@footnoteC\c@footnote
\makeatother
\def\Footnotetextbox#1#2{\footnotetextC[#1]{\hspace*{2pt}\LR{#2}}\stepcounter{footnoteC}}
\renewcommand{\thefootnoteC}{\textcolor{green}{\fnsymbol{footnoteC}}}
%%% The glossaries
\newglossary[aoc]{ARDico}{aox}{aoo}{\LR{The entries in arabic order}}
\newglossary[eoc]{ENDico}{eox}{eoo}{\LR{The entries in english order}}
\makeglossaries
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ORGANIZE ENTRIES AND GLOSSARIES OF FOOTNOTES
\newcommand*{\entrydico}[2]
{%
\newglossaryentry{edic-#1}
{type=ENDico,name={},sort={#2},
description={\LR{
\LR{#2} \hfill\glsrefentry{adic-#1}
\vspace*{1pt}\hrule\vspace*{1pt}}}
}
\newglossaryentry{adic-#1}
{type=ARDico,name={},text={#2},sort={#1},
description={#1 \hfill \LR{#2} \vspace*{2pt}\hrule\vspace*{2pt}}
}
}
%%%%%%% The format of the output link
\defglsentryfmt[ENDico]{}
\defglsentryfmt[ARDico]{
\ifglsused{\glslabel}%% For the used gls entries
{\ifthenelse{\equal{\TestGlossNumber}{1}}%% For use in a box
{\Footnotetextbox{\value{footnoteC}}{\glsentrytext{\glslabel}}} %% gls Entries in a box.. ifthenelse TRUE
{$^{\textcolor{red}{\glsrefentry{\glslabel}}}$} %% Usual gls entries... ifthenelse FALSE
}
{%% For the unused gls entries
\footnoteC{\glsentrytext{\glslabel}}$^{\textcolor{red}{\glsrefentry{\glslabel}}}$
}%
}
\newcommand{\putgls}[1]{\gls{adic-#1}\gls{edic-#1}} %% For calling the gls entries
%%% My glossary own style for writing 2-columns index in left-to-right mode
\newglossarystyle{LTRmcolindex}{%
\setglossarystyle{index}%
\renewenvironment{theglossary}%
{%
\LTRmulticolcolumns
\begin{multicols}{\glsmcols}
\setlength{\parindent}{0pt}%
\setlength{\parskip}{0pt plus 0.3pt}%
\let\item\@idxitem}%
{\end{multicols}}%
}
\newcommand{\printARglossary}{\glsaddall%
\printglossary[type=ARDico,style=mcolindex]}
\newcommand{\printENglossary}{\glsaddall%
\printglossary[type=ENDico,style=LTRmcolindex,entrycounter=false]}
%% Some glossary entries
\entrydico{Aword1}{Eword1}\entrydico{Aword2}{Eword2}\entrydico{Aword3}{Eword3}\entrydico{Aword4}{Eword4}
\entrydico{Aword5}{Eword5}\entrydico{Aword6}{Eword6}
\begin{document}
\edef\TestGlossNumber{0}
\raggedright\LR{
A first entry\putgls{Aword1}. A second entry\putgls{Aword4}
A first repeated entry\putgls{Aword1}. A second repeated entry\putgls{Aword4}
}
\edef\SaveFootnoteNumber{\number\value{footnoteC}}
\edef\TestGlossNumber{1}
\begin{mybox}
\raggedright\LR{
Another entry\putgls{Aword3}. And another\putgls{Aword2}.
}
\end{mybox}
\setcounter{footnoteC}{\SaveFootnoteNumber}
\stepcounter{footnoteC}
\putgls{Aword3}\putgls{Aword2}
\addtocounter{footnoteC}{-1}
\edef\Testglossnumber{0}
\vspace*{-\baselineskip} %%% To avoid the vertical space produced by \putgls commands..
\edef\TestGlossNumber{0}
\raggedright\LR{
And another\putgls{Aword5}. And another\putgls{Aword6}
}
%%%% DICTIONARIES
\glsresetentrycounter
\printARglossary
\glsresetentrycounter
\printENglossary
\end{document}
并在生成词汇表后,在命令提示符下使用常用命令进行编译......
我的问题是:
1/ 我的目的有问题吗?如果没有,这是完成工作的好方法吗?更准确地说,是否有一个宏可以更优雅地使用 Latex 编程的强大功能来做到这一点?
2/ 我不明白这些命令从何而来 \stepcounter{footnoteC}
,以及之后 \addtocounter{footnoteC}{-1}
我通过“摸索”发现了什么……
3/ 其他问题。为什么英文词汇表以“idxitem”开头?我该如何消除它?