LaTeX/XeTeX/lualatex/whatever 中的大写 ẞ

LaTeX/XeTeX/lualatex/whatever 中的大写 ẞ

我正在尝试在 LaTeX 文档中获取 ẞ。我该怎么做?我已经尝试过:

  • 使用其他字体:dejavu 和 libertine
  • 使用\MakeUppercase{ß},有时会产生任何结果,有时会产生“SS”
  • 使用{\sc ß},有时会产生任何结果,有时会产生“SS”
  • 使用 XeTeX 和 lualatex:只省略 ẞ 并警告无法找到的字形
  • 使用\symbol{"1E9E},同样不会产生任何结果

我怎样才能做到这一点?

答案1

最简单的解决方案是,如果你确定文档中使用的所有字体都有字符 U+1E9E LATIN CAPITAL LETTER SHARP S,那么说

\uccode`ß="1E9E

否则,您需要提供替代品;这里有一个 Linux Libertine 和 Latin Modern 的示例。

\documentclass{article}
\usepackage{fontspec}
\usepackage{libertine}
\usepackage{newunicodechar}

%% simplistic solution
%\uccode`ß="1E9E

%% solution with substitutions
\newunicodechar{ß}{\ss}
\renewcommand{\SS}{\iffontchar\font"1E9E \symbol{"1E9E}\else SS\fi}

\newfontfamily{\lmr}[
  Ligatures=TeX,
  SmallCapsFont=Latin Modern Roman Caps,
]{Latin Modern Roman}


\begin{document}
\Huge
groß \MakeUppercase{groß}
\scshape Groß \MakeUppercase{Groß}

\lmr
groß \MakeUppercase{groß}
\scshape Groß \MakeUppercase{Groß}

\end{document}

在此处输入图片描述

答案2

Linux Libertine 有它。使用xelatex或运行它lualatex

\documentclass{article}
\usepackage{fontspec}
\usepackage{libertine}
\uccode`ß="1E9E
\begin{document}
\Huge
groß \MakeUppercase{groß}
\scshape Groß \MakeUppercase{Gro\char"1E9E}

\end{document}

在此处输入图片描述

答案3

在 Lualatex 中,以下工作有效:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{DejaVu Sans}

答案4

expl3 语言提供了一个函数tl_upper_case:nn {language} {input},其中语言代码de-alt将 ß 转换为大埃斯泽特

\documentclass{minimal}
\usepackage{libertinus}

\ExplSyntaxOn
\newcommand\toUpper[1]{\tl_upper_case:nn{de-alt}{#1}}
\ExplSyntaxOff

\begin{document}

\toUpper{Frauenfußball}

\end{document}

Libertinus 字体示例

在较新的系统中,你可以改用\text_uppercase:nn。截至 2020 年,文档称第二个参数应该是“BCP 47 字符串”,但实际上只de-alt有效,并且de-DE-1996根据 RFC 中的说明,无效。因此,使用较新的接口,你可以这样写:

\text_uppercase:nn {de-alt}{\text_expand:n{#1}}

expl3 文档声称你可以定义自己的映射\char_set_uccode:nn,但是当我用

\char_set_uccode:nn {`ß} {`ẞ}

\tl_upper_case:n在与 a或相同的 TeX 组内text_uppercase:n,它仍然将 ß 映射到 SS。

相关内容