我正在尝试在 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
答案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}
在较新的系统中,你可以改用\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。