我知道类似的问题已经被问过几次了。然而,没有一个答案能解决我的问题。这个答案说这是 中的一个错误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
方法之间的界限。
顺便说一句,我实际上使用了同样的方法来增加小型大写字母部分标题中空格字符的默认字距。
显示连字fl
和ff
。可根据需要轻松添加更多。
已编辑以处理星号部分/目录。
% !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}