在花体字体和标准字体之间切换

在花体字体和标准字体之间切换

我正在尝试创建一个可以使用标准字体或 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}

在此处输入图片描述

相关内容