我正在使用文档类编写文本gsm-l
,但节数与节符号重叠§
,如下所示:
以下是 MWE:
\documentclass[a4paper,12pt]{gsm-l}
\usepackage{amsthm, amssymb, amsmath, amsfonts}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[brazil]{babel}
\usepackage{gfsartemisia-euler}
\usepackage{dsfont}
\begin{document}
\chapter*{foo}
\tableofcontents
\chapter{foo}
\section{foo}
\section{foo}
\chapter{foo}
\section{foo}
\section{foo}
\end{document}
我认为问题出在\usepackage{gfsartemisia-euler}
或 上\usepackage[T1]{fontenc}
。我尝试用 分别注释每个包%
,当我注释上面的两个包时(再次,一次注释一个!),问题就解决了。我不知道为什么会发生这种情况。我该怎么办?
答案1
Artemisia-Euler 字体在 T1 编码中存在一个错误:§
字符被分配了零宽度。使用 OT1 编码时,字形具有正确的宽度。
使用 T1 编码的修复方法是使用葡萄牙语排版时所必需的,否则连字将受到阻碍,甚至几乎不可能,方法如下,指示 LaTeX 从 OT1 编码字体中获取字形:
\documentclass[a4paper,12pt]{gsm-l}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[brazil]{babel}
\usepackage{amsthm, amssymb, amsmath, amsfonts}
\usepackage{gfsartemisia-euler}
\usepackage{dsfont}
% fix the width of the § glyph
\UndeclareTextCommand{\textsection}{T1}
\DeclareTextSymbolDefault{\textsection}{OT1}
\begin{document}
\tableofcontents
\chapter{foo}
\S1
\section{foo}
\section{foo}
\chapter{foo}
\section{foo}
\section{foo}
\end{document}
笔记
该类gsm-l
与该问题无关,除了它显示该问题之外,因为它使用了目录中的§字形。
这是一个非常简单的例子:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{gfsartemisia-euler}
\begin{document}
{\fontencoding{OT1}\selectfont\S1}
{\fontencoding{T1}\selectfont\S1}
\end{document}
从输出中可以清楚地看出,§
T1 编码字体的宽度为零。建议的解决方法对连字没有影响,因为 § 无论如何都不会参与其中。
我检查了 T1 编码中的所有 Artemisia-Euler 字体,发现所有字体的 § 宽度均为零。这既是好消息也是坏消息:坏消息是因为这是一个错误;好消息是因为提议的 hack 将独立于当前字体运行。
答案2
T1
显然,和之间发生了字体编码冲突。如果使用 代替 ,OT1
错误的间距等就会消失:OT1
T1
\documentclass[a4paper,12pt]{gsm-l}
\usepackage{amsthm, amssymb, amsmath, amsfonts}
\usepackage[utf8]{inputenc}
\usepackage[OT1]{fontenc}
\usepackage[brazil]{babel}
\usepackage{gfsartemisia-euler}
\usepackage{dsfont}
\begin{document}
\chapter*{foo}
\tableofcontents
\chapter{foo}
\section{foo}
\section{foo}
\chapter{foo}
\section{foo}
\section{foo}
\end{document}