在一份德语文档中,我想用 Fraktur 排版一些选定的短语,而其余的则用 Linux Libertine 书写。使用 yfonts 包,输入 即可获得圆形 s(相对于高 s 而言的“现代” s)s:
。
第一个 MWE:
\documentclass[border=2]{standalone}
\usepackage{libertine}
\usepackage{yfonts}
\usepackage[ngerman]{babel}
\begin{document}
\frakfamily
The quick fox jumps: over the sleazy dog
\end{document}
但是,似乎 selnolig 包(在我的文档中用于非 Fraktur 文本)阻止了此输出:
\documentclass[border=2]{standalone}
\usepackage{libertine}
\usepackage{yfonts}
\usepackage[ngerman]{babel}
\usepackage[ngerman]{selnolig}
\begin{document}
\frakfamily
The quick fox jumps: over the sleazy dog
\end{document}
对于这种特殊情况,有没有办法禁用 selnolig 包?
答案1
您可以定义自己的宏并绕过预定义的连字自动化。
除了圆形 s 之外,您也许还应该为在印刷上正确排版的 Fraktur 中应该使用的最基本的宏定义宏,即 ch、ck 和 tz(从您的示例中可以看出,这些也被破坏了selnolig
):
\documentclass[border=2]{standalone}
\usepackage{libertine}
\usepackage{yfonts}
\usepackage[ngerman]{babel}
\usepackage[ngerman]{selnolig}
\DeclareTextSymbol{\ch}{LY}{133}
\DeclareTextSymbol{\ck}{LY}{134}
\DeclareTextSymbol{\tz}{LY}{139}
\DeclareTextSymbol{\rounds}{LY}{141}
\begin{document}
\frakfamily
The qui\ck{} fox jump\rounds{} bli\tz{}s\ch{}nell over the sleazy dog
\end{document}
答案2
我承认我不知道该yfonts
包如何完成转换为 Fraktur 的工作。s:
但是round-s
,我了解到该包将转换为连字符(在 TeX 意义上)。当然,我想不出任何其他原因来解释为什么—— 毕竟,它的存在是为了抑制连字符 —— 会干扰 转换为。s:
round-s
selnolig
s:
round-s
让我真正感到困惑的是,这种推断竟然会发生。当然,如果selnolig
包中加载了选项ngerman
,则绝对不会\nolig
设置任何指令来抑制s:
连字符,无论是选择性的还是全局性的。
我现在能建议的就是\selnoligoff
——你猜对了——在运行之前关闭 selnolig 例程的操作\frakfamily
。要在返回主文档系列后重新激活 selnolig 例程,请运行\selnoligon
。
例如,类似下面的内容:
\selnoligoff {\frakfamily
The quick brown fox jumps: over the lazy dog.
}
\selnoligon
auffallen aufisst aufjaulen % suppress ff, fi, and fj ligatures
因为selnolig
的例程不能识别(因此忽略)TeX 组,所以一定要让段落中断前执行\selnoligon
。这是因为selnolig
的例程修改了 TeX 的段落构建器进程。因此,
{\frakfamily
The quick brown fox jumps: over the lazy dog.
} \selnoligoff
auffallen aufisst aufjaulen
\selnoligon
也将完成工作,\selnoligoff
并\selnoligon
开始发挥作用前相应的段落中断发生。我同意这对于 TeX 老手来说一定看起来很奇怪。
我意识到这种解决方法并不优雅。如果文档中有很多 实例,那么实现起来可能会非常繁琐\frakfamily
。