我已经使用glossaries
包来制作英语-波斯语和波斯语-英语词典,其风格我发现这里。但遗憾的是,如下图所示,英文单词没有左对齐,而我确实需要词汇表是双列的。有没有办法让英文短语左对齐?
以下是我对 MWE 的看法:
\documentclass[11pt]{book}
\usepackage{amsthm,amssymb}
\usepackage{unicode-math}
\usepackage[a4paper,textwidth=6in]{geometry}
\usepackage{float}
\usepackage{graphicx}
\usepackage{setspace}
\usepackage[square,comma,sort&compress,numbers]{natbib}
\usepackage{multirow}
\usepackage{multicol}
\usepackage[hyperindex=true,pagebackref=false,colorlinks,linkcolor=red,citecolor=blue]{hyperref}
\usepackage[xindy,acronym,nonumberlist=true]{glossaries}
\usepackage[perpagefootnote=on]{bidi}
\usepackage[extrafootnotefeatures]{xepersian}
\settextfont[Scale=1]{Tahoma}
\setlatintextfont[Scale=1]{Times New Roman}
\setdigitfont[Scale=1]{Tahoma}
%%%%%% ============================================================================================================
\newglossarystyle{myFaToEn}{%
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\subsection*{\glsgetgrouptitle{##1}}}
\renewcommand*{\glossentry}[2]{\noindent\glsentryname{##1}\dotfill\space \glsentrytext{##1}
}
}
\newglossarystyle{myEntoFa}{%
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\begin{LTR} \subsection*{\glsgetgrouptitle{##1}} \end{LTR}}
\renewcommand*{\glossentry}[2]{\noindent\glsentrytext{##1}\dotfill\space \glsentryname{##1}
}
}
\newglossarystyle{myAbbrlist}{%
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\begin{LTR} \subsection*{\glsgetgrouptitle{##1}} \end{LTR}}
\renewcommand*{\glossentry}[2]{\noindent\glsentrytext{##1}\dotfill\space \Glsentrylong{##1}
}
\renewcommand*{\acronymname}{\rl{فهرست اختصارات}}
}
\newglossary[glg]{english}{gls}{glo}{واژهنامه انگلیسی به فارسی}
\newglossary[blg]{persian}{bls}{blo}{واژهنامه فارسی به انگلیسی}
\makeglossaries
\glsdisablehyper
\let\oldgls\gls
\let\oldglspl\glspl
\makeatletter
\renewrobustcmd*{\gls}{\@ifstar\@msgls\@mgls}
\newcommand*{\@mgls}[1] {\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\oldgls{#1}\glsuseri{f-#1}}{\lr{\oldgls{#1}}}}
\newcommand*{\@msgls}[1]{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\glstext{#1}\glsuseri{f-#1}}{\lr{\glsentryname{#1}}}}
\renewrobustcmd*{\glspl}{\@ifstar\@msglspl\@mglspl}
\newcommand*{\@mglspl}[1] {\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\oldglspl{#1}\glsuseri{f-#1}}{\oldglspl{#1}}}
\newcommand*{\@msglspl}[1]{\ifthenelse{\equal{\glsentrytype{#1}}{english}}{\glsplural{#1}\glsuseri{f-#1}}{\glsentryplural{#1}}}
\makeatother
\newcommand{\newword}[4]{
\newglossaryentry{#1} {type={english},name={\lr{#2}},plural={#4},text={#3},description={}}
\newglossaryentry{f-#1} {type={persian},name={#3},text={\lr{#2}},description={}}
}
%%%%%% ============================================================================================================
%%============================
\newcommand{\printabbreviation}{
\cleardoublepage
\phantomsection
\baselineskip=.75cm
\addcontentsline{toc}{chapter}{فهرست اختصارات}
\setglossarystyle{myAbbrlist}
\begin{LTR}
\Oldprintglossary[type=acronym]
\end{LTR}
\clearpage
}%
\newcommand{\printacronyms}{\printabbreviation}
\let\Oldprintglossary\printglossary
\renewcommand{\printglossary}{
\let\appendix\relax
\clearpage
\phantomsection
\twocolumn{}
\addcontentsline{toc}{chapter}{واژه نامه انگلیسی به فارسی}
\setglossarystyle{myEntoFa}
\LTRdblcol
\Oldprintglossary[type=english]
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{واژه نامه فارسی به انگلیسی}
\setglossarystyle{myFaToEn}
\RTLdblcol
\Oldprintglossary[type=persian]
\onecolumn{}
}%
%%%%%%
\input{testgloss}
\begin{document}
\chapter{فصل ۱}
از فرایندهای BALAS و GOMORY در بخش ۲-۲-۴ نام برده شده اما طرح آنها در فصل ۱ انجام گرفته. احتمالاً باید در بخش طرح شود.
هایپرلینک مسائل ۴-۸۶ و ۴-۸۷ در بخش اول توضیحات فصل دوم اضافه شود.
\glsaddall
\printglossary
\end{document}
此外,xindy
在打印任何词汇表之前需要执行三个命令:
xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.glg -o %.gls %.glo
xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.blg -o %.bls %.blo
xindy -L english -C utf8 -I xindy -M %.xdy -t %.alg -o %.acr %.acn
testgloss.tex
编辑:这是我忘记包含的文件内容:
\newword{Knapsackproblem}{Knapsack problem}{مسئلهٔ کولهپشتی}{}
\newword{ZerooneLP}{Zero-one integer programming}{برنامهریزی عدد صحیحِ صفر-یک}{}
\newword{w1}{Covering problem}{مسئلهٔ پوشش}{}
\newword{w2}{Packing problem}{مسئلهٔ بستهبندی}{}
\newword{w3}{Polynomial time}{زمان چندجملهای}{}
\newword{w4}{Special-purpose method}{روش تکمنظوره}{}
\newword{w5}{Size}{اندازه}{}
\newword{w6}{Approximation algorithm}{الگوریتم تقریبی}{}
\newword{w7}{Cutting stock problem}{مسئلهٔ برش چوب}{}
\newword{w8}{Loading problem}{مسئلهٔ بارگیری}{}
\newword{w9}{Bin-packing problem}{مسئلهٔ بستهبندی با جعبه}{}
\newword{w10}{Scheduling problem}{مسئلهٔ زمانبندی}{}
\newword{w11}{Feasible}{شدنی}{}
\newword{w12}{Assignment}{تخصیص}{}
\newword{w13}{Weight}{وزن}{}
\newword{w14}{Bounded Knapsack Problem (BKP)}{مسئلهٔ کولهپشتی کراندار}{}
\newword{w15}{General Knapsack Problem (GKP)}{مسئلهٔ کولهپشتی کلی}{}
\newword{w16}{Unbounded Knapsack Problem}{مسئلهٔ کولهپشتی بیکران}{}
\newword{w17}{Unbounded change-making problem}{مسئلهٔ پول-خردْکردن بیکران}{}
答案1
您的 MWE 缺少您用来定义词汇表单词的其他文件 ( testgloss.tex
)。不过,我重现了您的问题,下面是您可以修复它的方法。
首先,我重新排列了内容,这样第一行总是包含英文文本,因为这是 En2Fa 词典,所以第一个被读取的元素是英文术语。然后是波斯语文本,如果一行放不下,那么剩余部分将与右侧对齐。
\newglossarystyle{myEntoFa}{%
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\begin{latin} \subsection*{\glsgetgrouptitle{##1}} \end{latin}}
\renewcommand*{\glossentry}[2]{\begin{latin}\noindent\glsentryname{##1}\dotfill\space \noindent\raggedleft{\rl{\glsentrytext{##1}}} \end{latin}}
}
如果您确实希望将英文文本分成多行而不是波斯文文本,那么您可以执行以下操作:
\newglossarystyle{myEntoFa}{%
\renewenvironment{theglossary}{}{}
\renewcommand*{\glsgroupskip}{\vskip 10mm}
\renewcommand*{\glsgroupheading}[1]{\begin{latin} \subsection*{\glsgetgrouptitle{##1}} \end{latin}}
\renewcommand*{\glossentry}[2]{\noindent\raggedright{\rl{\glsentrytext{##1}}}\dotfill\space \noindent\lr{\glsentryname{##1}} \\}
}