西里尔小写字母在章节名称中不起作用

西里尔小写字母在章节名称中不起作用

我最近遇到了一个奇怪的问题。以下代码:

\documentclass[14pt, a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{fontspec}
\usepackage[english, serbianc]{babel}
\usepackage{polyglossia}
\setmainlanguage[Script=Cyrillic]{serbian}
\setotherlanguage{english}
\setmainfont{XCharter}

\begin{document}

    \begin{serbian}
        \begin{abstract}
            Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. \textsc{АаБбВвГгДд}.
        \end{abstract}

        \section{Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        Чича Ђорђе: \textsc{АаБбВвГгДд}.
    \end{serbian}

    \begin{english}
        \section{\foreignlanguage{serbian}{Чича Ђорђе: \textsc{АаБбВвГгДд}.}}
        Чича Ђорђе: \textsc{АаБбВвГгДд}.
    \end{english}

\end{document}

呈现以下结果:

在此处输入图片描述

如您所见,我使用的是具有丰富西里尔文支持的 XChapter,但是,它的小型大写字母在塞尔维亚语环境中不起作用,在摘要、章节名称、章节名称等中也不起作用。有趣的是,在英语语言环境中,小型大写字母在正文中起作用。我测试了其他具有良好西里尔文小型大写字母支持的字体,但出现了同样的问题。

有人知道问题可能是什么吗?我怎样才能让 XeTex 在塞尔维亚语环境以及摘要正文、章节名称、章节名称等中正确呈现 XChapter 小型大写字母?

答案1

这似乎是 的问题polyglossia。顺便说一句,你不应该同时加载它和babel,因为它们会互相冲突。

fontenc另外,使用 XeLaTeX 或 LuaLaTeX 时不要加载。

\documentclass[a4paper]{article}
\usepackage{fontspec}

\usepackage[english,serbianc]{babel}

\setmainfont{XCharter}

\begin{document}

\begin{abstract}
Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. \textsc{АаБбВвГгДд}.
\end{abstract}

\section{Чича Ђорђе: \textsc{АаБбВвГгДд}.}

Чича Ђорђе: \textsc{АаБбВвГгДд}.

\begin{otherlanguage}{english}
\section{\foreignlanguage{serbian}{Чича Ђорђе: \textsc{АаБбВвГгДд}.}}
\textsc{AbcDef}\textbf{\textsc{AbcDef}}
\end{otherlanguage}

\end{document}

在此处输入图片描述

如果愿意,您也可以使用,但在这种情况下,您需要通过定义一个系列(也可能是和)polyglossia来帮助包。\serbianfont\serbianfontsf\serbianfonttt

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

\setmainlanguage[script=Cyrillic]{serbian}
\setotherlanguage{english}

\setmainfont{XCharter}
\newfontfamily{\serbianfont}{XCharter}

\begin{document}

\begin{abstract}
Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. \textsc{АаБбВвГгДд}.
\end{abstract}

\section{Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        Чича Ђорђе: \textsc{АаБбВвГгДд}.

\begin{otherlanguage}{english}
\section{\foreignlanguage{serbian}{Чича Ђорђе: \textsc{АаБбВвГгДд}.}}
\textsc{AbcDef}\textbf{\textsc{AbcDef}}
\end{otherlanguage}

\end{document}

答案2

首先,您尝试混合不兼容的软件包polyglossiafontencbabel。 您想要选择babel使用传统的 8 位编码、babelUnicode 或Polyglossia

您之所以只在文本中遇到此问题,\foreignlanguage{serbian}{...}是因为您告诉 Babel 您使用的是 语言serbianc,而不是serbian。您在这里混淆了babelpolyglossia。因此,语言没有改变,因此脚本仍然设置为拉丁语。

修复该错误后,您又会遇到另一个问题:XCharter 禁用了 的小写字母Language=Serbian。但是,如果您设置Language=Default,则会得到俄语而不是塞尔维亚语 б。您想Language=Default仅设置小写字体,而解决方案是,对于babel

\documentclass[14pt, a4paper]{article}
\usepackage[english, serbianc]{babel}
\usepackage{fontspec}

\defaultfontfeatures[XCharter]{
  UprightFont = *-Roman,
  UprightFeatures = {SmallCapsFont=*-Roman},
  BoldFont = *-Bold,
  BoldFeatures = {SmallCapsFont=*-Bold},
  ItalicFont = *-Italic,
  SlantedFont = *-Slanted,
  SlantedFeatures = {SmallCapsFont=*-Slanted},
  BoldItalicFont = *-BoldItalic,
  BoldSlantedFont = *-BoldSlanted,
  BoldSlantedFeatures = {SmallCapsFont=*-BoldSlanted},
  SmallCapsFeatures={Letters=SmallCaps},
  Extension = .otf}

% XCharter 1.221 has liga for English but not Serbian, and a language feature
% for Serbian but not English.
\babelfont{rm}
          {XCharter}
\babelfont[english]{rm}
          [Ligatures=Common, Language=Default]{XCharter}
\babelfont[serbianc]{rm}
          [Script=Cyrillic,
           Language=Serbian,
           SmallCapsFeatures={Script=Cyrillic, Language=Default, Letters=SmallCaps}
          ]{XCharter}

\babeltags{serbian=serbianc} % Enable \begin{serbian}, etc.
\babeltags{english=english}

\begin{document}

    \begin{serbian}
        \begin{abstract}
            Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. АаБбВвГгДд \textsc{АаБбВвГгДд}.
        \end{abstract}

        \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.
    \end{serbian}

    \begin{english}
        \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.
        \textsc{English AaBbCc}
    \end{english}

\end{document}

XCharter 示例

这可以正确地为您获取塞尔维亚语小写字母以及小型大写字母。 Polyglossia 的等效项是:

\documentclass[14pt, a4paper]{article}
\usepackage{polyglossia}

\setdefaultlanguage{serbian}
\setotherlanguage{english}

\defaultfontfeatures[XCharter]{
  UprightFont = *-Roman,
  UprightFeatures = {SmallCapsFont=*-Roman},
  BoldFont = *-Bold,
  BoldFeatures = {SmallCapsFont=*-Bold},
  ItalicFont = *-Italic,
  SlantedFont = *-Slanted,
  SlantedFeatures = {SmallCapsFont=*-Slanted},
  BoldItalicFont = *-BoldItalic,
  BoldSlantedFont = *-BoldSlanted,
  BoldSlantedFeatures = {SmallCapsFont=*-BoldSlanted},
  SmallCapsFeatures={Letters=SmallCaps},
  Extension = .otf}

% XCharter 1.221 has liga for English but not Serbian, and a language feature
% for Serbian but not English.
\setmainfont[Ligatures=Common, Language=Default]{XCharter}
\newfontfamily\serbianfont{XCharter}[
  Script=Cyrillic,
  Language=Serbian,
  SmallCapsFeatures={Script=Cyrillic, Language=Default, Letters=SmallCaps}]

\begin{document}

    \begin{serbian}
        \begin{abstract}
            Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. АаБбВвГгДд \textsc{АаБбВвГгДд}.
        \end{abstract}

        \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.
    \end{serbian}

    \begin{english}
        \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.
        \textsc{English AaBbCc}
    \end{english}

\end{document}

另一种可以免除语言标记的替代方法是:

\documentclass[14pt, a4paper]{article}
\usepackage[nil]{babel}
\usepackage{fontspec}

\babelprovide[import=sr-Cyrl, onchar=fonts ids, main]{serbian}
\babelprovide[import=en, onchar=fonts ids]{english}

\defaultfontfeatures[XCharter]{
  UprightFont = *-Roman,
  UprightFeatures = {SmallCapsFont=*-Roman},
  BoldFont = *-Bold,
  BoldFeatures = {SmallCapsFont=*-Bold},
  ItalicFont = *-Italic,
  SlantedFont = *-Slanted,
  SlantedFeatures = {SmallCapsFont=*-Slanted},
  BoldItalicFont = *-BoldItalic,
  BoldSlantedFont = *-BoldSlanted,
  BoldSlantedFeatures = {SmallCapsFont=*-BoldSlanted},
  SmallCapsFeatures={Letters=SmallCaps},
  Extension = .otf}

% XCharter 1.221 has liga for English but not Serbian, and a language feature
% for Serbian but not English.
\babelfont{rm}
          {XCharter}
\babelfont[english]{rm}
          [Ligatures=Common, Language=Default]{XCharter}
\babelfont[serbian]{rm}
          [Script=Cyrillic,
           Language=Serbian,
           SmallCapsFeatures={Script=Cyrillic, Language=Default, Letters=SmallCaps}
          ]{XCharter}

\babeltags{serbian=serbian} % Enable \begin{serbian}, etc.
\babeltags{english=english}

\begin{document}

      \begin{abstract}
          Чича Ђорђе жваће шљиве. Његова кћи Љиља меша џем. АаБбВвГгДд \textsc{АаБбВвГгДд}.
      \end{abstract}

      \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}. ffi

    \begin{english}
        \section{АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.}
        АаБбВвГгДд Чича Ђорђе: \textsc{АаБбВвГгДд}.
        \textsc{English AaBbCc} ffi
    \end{english}

\end{document}

XCharter 示例

它会自动检测您输入的是拉丁文还是西里尔文,并相应地选择语言、字体功能和连字模式,无需标签。它需要 LuaLaTeX,但也可以采用 XeLaTeX 来实现。

答案3

问题可以简化为以下

\documentclass{article}

\usepackage{fontspec}
\setmainfont{XCharter}[Script=Cyrillic,]
\setsansfont{XCharter}[Script=Cyrillic,Language=Serbian]

\begin{document}
АаБбВвГгДд \textsc{АаБбВвГгДд}.
 
\sffamily 
 
АаБбВвГгДд \textsc{АаБбВвГгДд}. 

\end{document}

在此处输入图片描述

如您所见,添加西里尔字母和塞尔维亚语会禁用小型大写字母。

polyglossia 的文档并没有真正说明如何避免使用语言功能,但以下方法似乎有效:

\documentclass{article}

\usepackage{fontspec}
\usepackage{polyglossia}

\setmainlanguage[script=Cyrillic]{serbian}
\SetLanguageKeys{serbian}{language=Default}

\setmainfont{XCharter}

\begin{document}
АаБбВвГгДд \textsc{АаБбВвГгДд}.
\end{document}

相关内容