我正在尝试创建一个可以使用标准字体或 fraktur 排版的文档。
考虑以下 MWE:
\documentclass[a4paper]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{yfonts}
\begin{document}
\frakfamily
Test
Tes:t
This:: should have one colon.
Another example: The colon should stay here.
\end{document}
按原样排版,没有问题。如果我删除\frakfamily
使用标准字体排版文档的命令,则用于自定义 fraktur 输出的冒号将显示在输出内。
如何即时在 fraktur 和标准字体之间切换?有没有办法在序言中声明所有文档内容都使用 fraktures?
再澄清一下:文档应该完全使用 fraktur 或标准字体排版。由于我不想创建两个不同的源文件,所以我正在寻找一种方法,在s
使用标准字体时自动抑制后面的单个冒号。(使用外部脚本时这很容易,但在这种情况下,除了现有文件外,我还需要另一个中间源文件。)
答案1
使用 pdflatex 你可以尝试这样的事情:
\documentclass[a4paper]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage{yfonts}
\sfcode`\s=1001
\catcode`\:=\active
\DeclareRobustCommand:{\ifnum\spacefactor=1001 \spacefactor=1000 \else \string:\fi}
\begin{document}
%\frakfamily
Test
Tes:t
This:: should have one colon.
Another example: The colon should stay here.
\end{document}
使用 lualatex 你可以做这样的事情:
\documentclass[a4paper]{scrbook}
\usepackage[german]{babel}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature({
name = "ligc",
type = "ligature",
data = {
["s"] = { "s", ":" },
}})}
\setmainfont{TeX Gyre Pagella}[RawFeature=+ligc]
\begin{document}
Test
Tes:t
This:: should have one colon.
Another example: The colon should stay here.
\end{document}
答案2
在以下机构的帮助下这个答案,这里有一个解决方案xelatex
:
在您的系统上找到该文件tex-text.map
并将其复制到您的工作目录中,并以该名称fraktur.map
(或您想要的任何名称)命名。然后在其中添加一行,如下所示:
; TECkit mapping for TeX input conventions <-> Unicode characters
LHSName "TeX-text"
RHSName "UNICODE"
pass(Unicode)
; ligatures from Knuth's original CMR fonts
U+002D U+002D <> U+2013 ; -- -> en dash
U+002D U+002D U+002D <> U+2014 ; --- -> em dash
U+0027 <> U+2019 ; ' -> right single quote
U+0027 U+0027 <> U+201D ; '' -> right double quote
U+0022 > U+201D ; " -> right double quote
U+0060 <> U+2018 ; ` -> left single quote
U+0060 U+0060 <> U+201C ; `` -> left double quote
U+0021 U+0060 <> U+00A1 ; !` -> inverted exclam
U+003F U+0060 <> U+00BF ; ?` -> inverted question
; additions supported in T1 encoding
U+002C U+002C <> U+201E ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C <> U+00AB ; << -> LEFT POINTING GUILLEMET
U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
; additions to suppress fraktur ligature
U+0073 U+003A <> U+0073 ; s: -> LATIN SMALL LETTER S
然后运行
teckit_compile fraktur.map
这将创建一个名为 fraktur.tec 的文件。
然后,您可以像这样使用该映射文件xelatex
:
\documentclass{article}
\usepackage[german]{babel}
\usepackage{fontspec}
\usepackage{yfonts}
\setmainfont{Latin Modern Roman}[Mapping=fraktur]
\begin{document}
Test
Tes:t
This:: should have one colon.
Another example: The colon should stay here.
\frakfamily
Test
Tes:t
This:: should have one colon.
Another example: The colon should stay here.
\end{document}