不同语言使用不同字体(词汇表中混合)

不同语言使用不同字体(词汇表中混合)

我想用正文中的意第绪语单词(希伯来文字应为 Ezra SIL 字体)制作一个词汇表(使用词汇表包)。描述将使用德语(拉丁文字 = Linux Libertine)。我试过 \begin{hebrew} … \end{hebrew},但它不起作用(并使文档变得臃肿)。有什么建议吗?词汇表条目如下所示:

\newglossaryentry{האנאָרים}{name={\RL{האנאָרים}},description={‘Freuden, Vergnügen’, \textit{hannáah} \parencite[90]{Tendlau1860}, \textit{hanō-e}}}

我希望它不会太混乱:

\documentclass[10pt,a5paper,twoside]{scrbook}
\usepackage[onehalfspacing]{setspace}

\usepackage[bmargin=2.25cm]{geometry}



\usepackage{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot

\ihead{\headmark}


\ohead{\pagemark}
\setheadsepline{0.4pt}
\setkomafont{pageheadfoot}{\normalfont\normalcolor\small}\setkomafont{pagenumber}{\normalfont}


\addtokomafont{pagehead}{\normalfont}


\setkomafont{disposition}{\normalcolor\bfseries} 

\clubpenalty=10000
\widowpenalty=10000






\usepackage{color}
\usepackage{times,multicol,multirow, bigdelim}



%%%FONTS AND LANGUAGES

\usepackage{fontspec}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine}
\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL}




\usepackage{metalogo,hyperref}
\usepackage{polyglossia, xunicode}
\usepackage[parfill]{parskip}
\usepackage[series={A,B,C}]{reledmac}
\usepackage{reledpar}

\setgoalfraction{0.85}


\lineation{section}
\linenummargin{right}
%\setRlineflag{}



\linenumincrement*{5}
\firstlinenum*{0} 
\maxchunks{10000}


%START GLOSSAR%%%%%%%%%%%%%%%
\usepackage[xindy]{glossaries}
\makenoidxglossaries
\input{glossaries.tex}
\setglossarystyle{tree}
%END GLOSSAR%%%%%%%%%%%%%%




\Xendbeforepagenumber{S.\,}
\Xendafterpagenumber{:\,}
\Xendlineprefixsingle{Z.\,}


\renewcommand{\thefootnoteA}{\fnsymbol{footnoteA}}








\newcommand\einzugjid{\hangindent=5mm\hangafter=1}

\newcommand\speaker[1]{\noindent{#1} \einzugjid
}

\newcommand\einzug{\hangindent=5mm\hangafter=1}

\newcommand\speakerd[1]{\noindent
{\textsc{#1}} \einzug
}

\usepackage[normalem]{ulem}


\usepackage{csquotes}
\usepackage[style=authoryear,language=ngerman]{biblatex} \bibliography{LitGrobsdorfEdition}
\renewcommand*{\postnotedelim}{\addcolon\,}
\DeclareFieldFormat{postnote}{#1}
\DeclareFieldFormat{multipostnote}{#1}






\begin{document}



\begin{pages}
\begin{Leftside}\begin{hebrew}
 \setRTL
 \beginnumbering

  \pstart     {\RL{\speaker{יוקב.}
   געלטע דאָס גִיט אָבער לאָסטיג
   \edgls{האנאָרים}
?}}  \pend

\pstart  {\RL{\speaker{בויער.}
  יאָ, דאָס גלעב אייך. הויא פערדיענסט דוא אַהך ניט פֵֿיעל. }}
 \pend

 \pstart   {\RL{\speaker{יוקב.}
    פֿערדיענט אייכס דאָך אין אַה פֿירטעל יאָהר, וואָהס מייכ‘ס הויא    און מאָר קאָסט.
\textit{)}\textit{זייפצט}.\textit{(}
}} \pend



 \endnumbering
\end{hebrew}
\end{Leftside}


\begin{Rightside}

\beginnumbering



 \pstart  \speakerd{Person1.} {Gell}, Text…?  \pend

\pstart   \speakerd{Person 2.} Text…  \pend

\pstart    \speakerd{Person1.} Text…. \textit{(Seufzt.)} \pend


\endnumbering

\end{Rightside}


\end{pages}
\Pages



\printnoidxglossaries



\end{document}

答案1

从非常简单的文档开始,然后逐步构建,这很有帮助。我没有您的希伯来语字体,所以我将改用 Keter YG。

最初的最小示例:

\documentclass{article}

\usepackage{fontspec}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine}

\begin{document}
Deutsche
\end{document}

这会产生一个错误:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: "font-not-found"
! 
! The font "Linux Libertine" cannot be found.
! 
! See the fontspec documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

字体名称应为Linux Libertine O。修复此问题后,示例可以正常编译,因此现在可以扩展以添加希伯来语:

\documentclass{article}

\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית
\end{hebrew}

\end{document}

编译没有问题,所以现在我们可以添加glossaries

\documentclass{article}

\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy]{glossaries}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית
\end{hebrew}

\end{document}

现在出现错误:

! LaTeX Error: Unable to properly define \@@leqno; primitive \leqno no longer primitive.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.2568 \@saveprimitive\leqno\@@leqno

这里的问题是glossaries加载amsmathamsmath期望\leqno是原始的。不幸的是,polyglossiahebrew设置重新定义,\leqno因此它不再是原始的。最简单的解决方法是amsmath先加载。(我不确定这是否会在以后引起问题,但至少它可以消除这个错误。)

因此修改后的例子为:

\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy]{glossaries}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית
\end{hebrew}

\end{document}

先前的错误已消失,但出现了另一个错误:

! Package bidi Error: Oops! you have loaded package supertabular after 
bidi package. Please load package supertabular before bidi package, and 
then try to run xelatex on your document again.

glossaries包会自动加载一些预定义样式,包括supertabular中的样式glossary-super.sty。这里最简单的解决方案是使用 选项指示跳过glossaries。有一个类似的错误,它被 所使用。这可以省略:glossary-supernosuperlongtableglossary-longnolong

\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy,nosuper,nolong]{glossaries}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית
\end{hebrew}

\end{document}

这会将可用样式限制为列表和树样式,但至少示例文档现在可以编译。由于您tree在问题中使用了它,我将使用它,但如果您确实想要其中一种表格样式,请尽早加载相关的表格包。例如:

\documentclass{article}

\usepackage{amsmath}
\usepackage{longtable}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy,nosuper]{glossaries}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית
\end{hebrew}

\end{document}

现在可以添加示例条目和词汇表:

\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy,nosuper,nolong,style=tree]{glossaries}

\makeglossaries

\newglossaryentry{האנאָרים}{name={\RL{האנאָרים}},description={‘Freuden, Vergnügen’, \textit{hannáah}, \textit{hanō-e}}}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית

\gls{האנאָרים}
\end{hebrew}

\printglossaries
\end{document}

编译时没有错误,但有一个警告:

Package glossaries Warning: No language module detected for `hebrew'.
(glossaries)                Language modules need to be installed separately.
(glossaries)                Please check on CTAN for a bundle called
(glossaries)                `glossaries-hebrew' or similar.

程序glossaries包加载tracklang确定文档语言。它支持两种语言:germanhebrew。支持德语(glossaries-german),但不适用于希伯来语,这就是为什么会出现警告。

您可以忽略此警告(并提供您自己的翻译),或者复制glossaries-german.ldfglossaries-hebrew.ldf替换所有的实例germanhebrew所有的实例GermanHebrew用适当的希伯来语翻译替换德文。

如果调用该文件test.tex则构建过程如下:

xelatex test
makeglossaries test
xelatex test

如果你没有安装 Perl(makeglossaries是一个 Perl 脚本),你可以使用轻量级 Lua 版本makeglossaries-lite

xelatex test
makeglossaries-lite test
xelatex test

makeglossaries和都makeglossaries-lite从文件中获取信息.aux,信息告诉他们文档的主要语言是德语,因此makeglossaries

xindy  -L german -C din5007-utf8 -I xindy -M "test" -t "test.glg" -o "test.gls" "test.glo"

makeglossaries-lite不太聪明,并且忽略了din5007设置:

"xindy" -I xindy -L german -C utf8 -M "test.xdy" -t "test.glg" -o "test.gls" "test.glo"

所以如果可以的话最好使用makeglossaries。此时文档如下所示:

文件图像

我猜你实际上想让词汇表按照希伯来语排序(因为name包含希伯来语字符)。由于这不是文档的主要语言,因此你需要指示makeglossaries(或makeglossaries-lite)将hebrew设置传递给xindy。你还需要关闭阿拉伯数字组的创建。像这样:

\usepackage[xindy={language=hebrew,glsnumbers=false},nosuper,nolong,style=tree]{glossaries}

现在决定该词汇表是带有德语描述的希伯来语词汇表还是希伯来语术语的德语词汇表?

在第一种情况下,显示词汇表时需要切换语言。由于不支持希伯来语glossaries,因此您需要设置标题。由于我不会说希伯来语,所以我只好使用谷歌翻译来提供标题。根据需要进行更改。德语描述需要用德语设置。这需要一种自定义样式,该样式可以基于样式。tree由于此样式会自动切换到希伯来语(使用环境) ,因此名称中hebrew不需要。(也在环境中使用。)\RL\glshebrew

\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy={language=hebrew,glsnumbers=false},nosuper,nolong]{glossaries}

\makeglossaries

\newglossarystyle{hebrewgerman}
{% base it on the tree style:
  \setglossarystyle{tree}%
  % switch to hebrew
  \renewenvironment{theglossary}%
    {\setlength{\parindent}{0pt}%
     \setlength{\parskip}{0pt plus 0.3pt}%
     \begin{hebrew}
    }%
    {\end{hebrew}}%
  \renewcommand{\glossentry}[2]{%
    \hangindent0pt\relax
    \parindent0pt\relax
    \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\glossentryname{##1}}}%
    \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
    \glstreepredesc
    % put description and number list in German
    \textgerman{\glossentrydesc{##1}\glspostdescription\space##2}\par
  }%
}

\newglossaryentry{האנאָרים}{name={האנאָרים},description={‘Freuden, Vergnügen’, \textit{hannáah}, \textit{hanō-e}}}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית

\gls{האנאָרים}
\end{hebrew}

\printglossary[title={מילון מונחים},style=hebrewgerman]
\end{document}

得出的结果为:

词汇表图片

这会将描述和编号列表设置为德语。您可以根据自己的需求调整样式。

如果您想要第二种情况,即以德语作为词汇表的主要语言,那么可以使用类似的方法:

\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy={language=hebrew,glsnumbers=false},nosuper,nolong]{glossaries}

\makeglossaries

\newglossarystyle{germanhebrew}
{% base it on the tree style:
  \setglossarystyle{tree}%
  % switch to german
  \renewenvironment{theglossary}%
    {\setlength{\parindent}{0pt}%
     \setlength{\parskip}{0pt plus 0.3pt}%
     \begin{german}
    }%
    {\end{german}}%
  \renewcommand{\glossentry}[2]{%
    \hangindent0pt\relax
    \parindent0pt\relax
    \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{%
      \texthebrew{\glossentryname{##1}}}}%
    \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
    \glstreepredesc\glossentrydesc{##1}\glspostdescription\space##2\par
  }%
}

\newglossaryentry{האנאָרים}{name={האנאָרים},description={‘Freuden, Vergnügen’, \textit{hannáah}, \textit{hanō-e}}}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית

\gls{האנאָרים}
\end{hebrew}

\printglossary[style=germanhebrew]
\end{document}

得出的结果为:

文件图像

有多种方法可以集成makeglossaries到构建过程中。

TeXShop

基于这个答案,为了makeglossaries与 TeXShop 一起使用,您可以创建一个包含以下内容的文件:

#!/bin/sh
bfname=$(dirname "$1")/"`basename "$1" .tex`"  
xelatex "$1"
makeglossaries "$bfname"
xelatex "$1" 
xelatex "$1" 

将其glossaries.engine另存为并按照另一个答案。更好的方法是使用arara,如下所述。

阿拉拉

安装arara并在文档开头添加以下几行:

% xelatex
% makeglossaries
% xelatex

如果文件被调用,test.tex那么在终端中只需执行

arara test

您也可以arara使用与上述类似的方法添加到 TeXShop。创建一个名为的文件,arara.engine其中包含:

#!/bin/sh
arara "$1"

使其可执行(从终端)

chmod a+x arara.engine

复制或移动文件至~/Library/TeXShop/Engines

cp arara.engine ~/Library/TeXShop/Engines

重新启动 TeXShop 并arara从按钮旁边的下拉列表中进行选择Typeset。(如果您有翻译版本,请将其与TeXShop 主页

如果您需要添加参考书目,只需添加

% arara: bibtex

或者

% arara: biber

到文件开头的注释。

完整示例:

% arara: xelatex
% arara: makeglossaries
% arara: xelatex
% arara: bibtex
% arara: xelatex
% arara: xelatex
\documentclass{article}

\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{polyglossia}

\usepackage{libertine}
\setmainfont[Ligatures=TeX]{Linux Libertine O}

\setmainlanguage{german}
\setotherlanguage{hebrew}
\newfontfamily\hebrewfont[Script=Hebrew]{Keter YG}

\usepackage[xindy={language=hebrew,glsnumbers=false},nosuper,nolong]{glossaries}

\makeglossaries

\newglossarystyle{germanhebrew}
{% base it on the tree style:
  \setglossarystyle{tree}%
  % switch to german
  \renewenvironment{theglossary}%
    {\setlength{\parindent}{0pt}%
     \setlength{\parskip}{0pt plus 0.3pt}%
     \begin{german}
    }%
    {\end{german}}%
  \renewcommand{\glossentry}[2]{%
    \hangindent0pt\relax
    \parindent0pt\relax
    \glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{%
      \texthebrew{\glossentryname{##1}}}}%
    \ifglshassymbol{##1}{\space(\glossentrysymbol{##1})}{}%
    \glstreepredesc\glossentrydesc{##1}\glspostdescription\space##2\par
  }%
}

\newglossaryentry{האנאָרים}{name={האנאָרים},description={‘Freuden,
Vergnügen’, \textit{hannáah}, \cite{article-minimal}, \textit{hanō-e}}}

\begin{document}
Deutsche

\begin{hebrew}
עִברִית

\gls{האנאָרים}
\end{hebrew}

\printglossary[style=germanhebrew]

\bibliographystyle{plain}
\bibliography{xampl}
\end{document}

另一个选择是使用latexmk。例如,参见如何让 Latexmk 使用 makeglossaries?makeindex(但请确保您不要使用这里明确要求的答案xindy)。

确保您拥有所有必需软件包的最新版本。您可以\listfiles在文档开头添加版本号,并将其与加拿大运输安全局

相关内容