为不同语言加载两个字体包会产生间距问题

为不同语言加载两个字体包会产生间距问题

我有一篇很长的英文文本,有一页,还有一个塞尔维亚语单词。
最初,用于排版的软件包是fourier
该软件包运行良好,只是缺少塞尔维亚语字体,特别是西里尔语字体。

我找到了另一个包,名为erewhon,它非常相似,并且有西里尔符号。然而,在间距方面有一些差异。

如果我只加载fourier包,那么西里尔文部分就不好。
如果我只加载erewhon包,那么数学公式就很单薄,看起来很糟糕,而且存在间距问题,新行中空格太多(这几乎不明显,但总结在文档中)。

如果我加载这两个包,那么字体就可以了,但是会存在一些间距问题,并且新行中的空间太多(同样很难察觉,但在整个文档中都有体现)。

是否可以以某种方式仅为一个页面和一个额外的单词加载一个包,或者仅对erewhon这两个页面使用字体并fourier在文档的其余部分使用该包?

我尝试创建两个 pdf,一个包含两个包,另一个仅包含fourier。然后我将包含西里尔文本的两页复制到第二个文档中。这正是我想要的文档外观,但是,更改 pdf 文件会破坏文档中的所有链接。

这是一个例子。

\documentclass[a4paper,11pt]{book}

\usepackage[utf8]{inputenc}
\usepackage[serbianc, french, italian, main=english]{babel}
\usepackage[T2A]{fontenc} 

\usepackage{lmodern} %used for fixing blurry typewriter font (from the document, not sure if needed)
\usepackage{erewhon}
\usepackage{fourier}


\begin{document}

This page is in English.
\newpage

\begin{otherlanguage}{serbianc}
Ова страница је на Српском. % The spacing here is not important
\end{otherlanguage}
\newpage

This is another page.
The previous pages are in English/\foreignlanguage{serbianc}{Српски}). % The spacing here is not important
\newpage

The document continues in English...
Line one.     % The spacing between line here changes when I \usepackage{erewhon}
Line two.     % With only \usepackage{fourier} the spacing is good
Line three.

\end{document}

因此,上述代码可以编译,并且运行良好,只是间距是从继承而来的erewhon,这看起来很糟糕,并且在文档中产生了巨大的间隙。是否可以修复间距问题,或者以其他方式加载西里尔字体以保留间距fourier

答案1

您可以将 Erewhon 仅用于西里尔文\DeclareFontFamilySubstitution(2020 年 2 月后需要 LaTeX)。您还可以以略小的尺寸加载 Erewhon,以匹配 Fourier。

serbianc.ldf另外,必须修复中的几个虚假空格。不幸的是,我发现的唯一方法(除非编辑文件)是修复 的整个定义\extrasserbianc。如果不修复它们,每次调用 时都会得到七个空格\foreignlanguage{serbianc}{...}

错误的空格位于 的第 305-307 行、第 351-354 行和第 356-359 行末尾serbianc.ldf。您应该报告此错误。

不要忘记声明法语和意大利语所需的 T1 编码。

\documentclass[a4paper,11pt]{book}

%\usepackage[utf8]{inputenc}
\usepackage[serbianc, french, italian, main=english]{babel}
\usepackage[T2A,T1]{fontenc}

\usepackage{fourier}

\makeatletter
\providecommand{\erewhon@scale}{0.98116}
\makeatother

\DeclareFontFamilySubstitution{T2A}{\familydefault}{erewhon-TLF}

\makeatletter
\def\extrasserbianc{%
  \cyrillictext
  \languageshorthands{serbianc}%
  \bbl@activate{"}%
  \bbl@frenchspacing
  \bbl@serbiancindent
  \babel@save\@Alph\let\@Alph\srbc@Alph
  \babel@save\@alph\let\@alph\srbc@alph
  \babel@save\enumEng\def\enumEng{\srbc@lettering=\tw@}% <--- was missing
  \babel@save\enumLat\def\enumLat{\srbc@lettering=\@ne}% <--- was missing
  \babel@save\enumCyr\def\enumCyr{\srbc@lettering=\z@}% <--- was missing
  \babel@save{\th}\let\ltx@th\th
    \def\th{\textormath{\ltx@th}{\mathop{\operator@font th}\nolimits}}%
  \babel@save\nzs
  \babel@save\nzd
  \babel@save\NZS
  \babel@save\NZD
  \if@srbc@uni@ode
    \def\nzs{\mathop{\mathrm{нзс}}\nolimits}% <--- was missing
    \def\nzd{\mathop{\mathrm{нзд}}\nolimits}% <--- was missing
    \def\NZS{\mathop{\mathrm{НЗС}}\nolimits}% <--- was missing
    \def\NZD{\mathop{\mathrm{НЗД}}\nolimits}% <--- was missing
  \else
    \def\nzs{\mathop{\textnormal{\cyrn\cyrz\cyrs}}\nolimits}% <--- was missing
    \def\nzd{\mathop{\textnormal{\cyrn\cyrz\cyrd}}\nolimits}% <--- was missing
    \def\NZS{\mathop{\textnormal{\CYRN\CYRZ\CYRS}}\nolimits}% <--- was missing
    \def\NZD{\mathop{\textnormal{\CYRN\CYRZ\CYRD}}\nolimits}% <--- was missing
  \fi
}
\makeatother

\begin{document}

This page is in English.
\newpage

\begin{otherlanguage}{serbianc}
Ова страница је на Српском.
\end{otherlanguage}
\newpage

This is another page.
The previous pages are in English/\foreignlanguage{serbianc}{Српски}).
\newpage

The document continues in English...

\end{document}

在此处输入图片描述

使用我建议的缩放比例,傅立叶字母表中大写字母 C(拉丁文)的高度为 7.12843pt,大写字母 С(西里尔文)的高度为 7.12839pt。差异可以忽略不计。如果不使用缩放比例,大写西里尔字母的高度为 7.26532pt,差异为不是微不足道。

答案2

fourier软件包加载 Utopia 文本字体(缩放比例为 92%,不含西里尔文)并添加匹配的数学字体。该软件包加载erewhonUtopia 文本字体(缩放比例为 94%,含西里尔文)但对数学不做任何处理,对于您认为太细的数学,您会得到 LatinModern。

我建议切换到 LuaTeX 而不是 pdfTeX,并尝试使用以下命令编译此文件lualatex

\documentclass[a4paper,11pt]{book}

\usepackage[serbianc, french, italian, main=english]{babel}

\usepackage{fourier-otf}
%\setsansfont{...}           % Choose a SansSerif font if needed
\setmonofont{lmmono10-regular.otf} % Latin Modern Typewriter font

\begin{document}

This page is in English.
\newpage

\begin{otherlanguage}{serbianc}
  Ова страница је на Српском.
\end{otherlanguage}
\newpage

This is another page.
The previous pages are in English/\foreignlanguage{serbianc}{Српски}). 
\newpage

The document continues in English...
Line one.
Line two.
Line three.
\end{document}

这有帮助吗?

相关内容