无法抑制大写标题中的连字符

无法抑制大写标题中的连字符

我知道类似的问题已经被问过几次了。然而,没有一个答案能解决我的问题。这个答案说这是 中的一个错误luaotfload。但我已经在使用较新的版本(2.80001)。

我正在尝试通过以下方式抑制连字符塞尔诺格包。效果很好,但不适用于大写字母的文本。使用微型 \DisableLigatures或者塞尔诺格包 \breaklig也没有效果。参见 MWE:

% !TeX program = lualatex
% !TeX encoding = UTF-8 Unicode
\documentclass[%
    a4paper,
    DIV=9,
    fontsize=14pt,
    parskip=half-
]{scrartcl}

\usepackage[ngerman]{babel}

\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}[%
    Ligatures=Common,
    SmallCapsFeatures={Letters=UppercaseSmallCaps},
]

\setkomafont{disposition}{\rmfamily}

\usepackage[tracking=true]{microtype}
\SetTracking{encoding=*,shape=sc}{160}
\usepackage[ngerman]{selnolig}

\RedeclareSectionCommand[%
    font={\scshape\mdseries\Large}
]{section}

\RedeclareSectionCommand[%
    font={\mdseries\Large}
]{subsection}

\begin{document}
% Heading set in caps => ligature still present
\section{Berufliche Praxis}
Berufliche Praxis\par
ff fl fi

% Using \breaklig command => ligature still present
\section{Beruf\breaklig liche Praxis}

% Disabling selnolig => works as expected
\selnoligoff
\section{Berufliche Praxis}
\selnoligon

% No caps => works as expected
\subsection{Berufliche Praxis}

\end{document}

(非常高的跟踪能力使其更加清晰)

所以塞尔诺格包注意连字符职业被抑制。这是正确的。但它不适用于带有小型大写字母的标题。\selnoligoff在之前添加\section似乎是抑制带有小型大写字母的标题中的连字符的唯一方法?还是我错过了一个设置?我想知道哪个包导致了这个错误。

答案1

这是一种自动化方法,它重新调整的参数来\section查找指定的连字符,例如和,fl并用它们替换,例如f\kern0ptl

在 MWE 中,寻找\makeatletter\makeatother方法之间的界限。

顺便说一句,我实际上使用了同样的方法来增加小型大写字母部分标题中空格字符的默认字距。

显示连字flff。可根据需要轻松添加更多。

已编辑以处理星号部分/目录。

% !TeX program = lualatex
% !TeX encoding = UTF-8 Unicode
\documentclass[%
    a4paper,
    DIV=9,
    fontsize=14pt,
    parskip=half-
]{scrartcl}

\usepackage[ngerman]{babel}

\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}[%
    Ligatures=Common,
    SmallCapsFeatures={Letters=UppercaseSmallCaps},
]

\setkomafont{disposition}{\rmfamily}

\usepackage[tracking=true]{microtype}
\SetTracking{encoding=*,shape=sc}{160}
\usepackage[ngerman]{selnolig}

\RedeclareSectionCommand[%
    font={\scshape\mdseries\Large}
]{section}

\RedeclareSectionCommand[%
    font={\mdseries\Large}
]{subsection}

\makeatletter
\usepackage{listofitems}
\expandafter\def\csname{fl}lig\endcsname{f\kern0ptl}% fl
\expandafter\def\csname{ff}lig\endcsname{f\kern0ptf}% ff
\expandafter\def\csname{ }lig\endcsname{\hspace{11pt}}% INCREASE SPACE KERN
\setsepchar{fl||ff|| }% CONCATENATE THE DESIRED LIGATURES WITH || "OR"
\let\svsection\section
\renewcommand\section{\@ifstar{\starsection}{\nostarsection}}
\newcommand\starsection[1]{%
  \tmptitle{#1}%
  \svsection*{\tmp}%
}
\newcommand\nostarsection[2][\relax]{%
  \tmptitle{#2}%
  \if\relax#1\relax\svsection[#2]{\tmp}\else%
    \svsection[#1]{\tmp}%
  \fi%
}
\newcommand\tmptitle[1]{%
  \readlist\myligs{#1}%
  \def\tmp{}%
    \foreachitem\x\in\myligs{%
      \expandafter\g@addto@macro\expandafter\tmp\expandafter{\x}%
      \ifnum\xcnt<\listlen\myligs[]\relax
        \expandafter\expandafter\expandafter\g@addto@macro
        \expandafter\expandafter\expandafter\tmp
        \expandafter\expandafter\expandafter{%
        \csname{\myligssep[\xcnt]}lig\endcsname}%
      \fi
    }%
}
\makeatother
\begin{document}
\tableofcontents

\hrulefill
\section[blah Berufliche]{Berufliche Praxis}

\section{Hoffähige Praxis}

\subsection{Berufliche Praxis}
\end{document}

在此处输入图片描述

当然,我不应该提及使用这种方法可以做的疯狂事情。但我会的。添加这些行(和包xcolor):

\expandafter\def\csname{e}lig\endcsname{\kern3pt\textcolor{red}{e}\kern1pt}
\setsepchar{fl||ff|| ||e}% CONCATENATE THE DESIRED LIGATURES WITH || "OR"

产生这样的结果:

在此处输入图片描述

答案2

使用当前的 luaotfload(版本 2.96),您可以禁用 SmallCapsFeatures 中的连字:

\documentclass[%
    a4paper,
    DIV=9,
    fontsize=14pt,
    parskip=half-
]{scrartcl}

\usepackage[ngerman]{babel}

\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}[%
    Ligatures=Common,
    SmallCapsFeatures=
      {Letters=UppercaseSmallCaps,
       Ligatures=CommonOff}, %disable ligatures
]

\setkomafont{disposition}{\rmfamily}

\usepackage[tracking=true]{microtype}
\SetTracking{encoding=*,shape=sc}{160}

\RedeclareSectionCommand[%
    font={\scshape\mdseries\Large}
]{section}

\RedeclareSectionCommand[%
    font={\mdseries\Large}
]{subsection}

\begin{document}

\section{Berufliche Praxis}
Berufliche Praxis\par
ff fl fi

\end{document}

在此处输入图片描述

相关内容