我有以下 MnWE,它是非- 工作后,xelatex.exe
它不会显示带重音的捷克字母ěščřž
,但显示“á”。
所以如何无论重音符号的表达方式有多复杂,我都要输入这些重音符号。但xelatex.exe
无论如何我都需要。
编译以下 MnWE 所需的所有辅助文件是这里。
\documentclass{article}
%\usepackage{amssymb}
\usepackage[czech]{babel}
%\usepackage[utf8]{inputenc}
\usepackage[utf8]{inputenc}
\usepackage[IL2]{fontenc}
\usepackage{addfont}
\addfont[1.5]{OT1}{slabikar}{\slabikar}
\pdfmapline{=slabikar slabikar <slabikar.pfb}
\begin{document}
\font\pis = slabikar at1cm
\pis
\baselineskip = 1.5cm
\obeylines
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
\end{document}
答案1
在 XeLaTeX 中,您可以执行以下操作:
\documentclass{article}
\def\adef#1{\catcode`#1=13 \begingroup \lccode`\~=`#1\lowercase{\endgroup\def~}}
\font\slabikar=slabikar
\def\pis{\slabikar
\adef š{^^b9}%
\adef ř{^^f8}%
\adef č{^^e8}%
}
\pdfmapline{=slabikar slabikar <slabikar.pfb}
\begin{document}
{\pis
\baselineskip = 1.5cm
\obeylines
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
\par}
\end{document}
您必须在\pis
宏中添加更多捷克字母。请参阅这些字母的 ISO-8859-2 代码。
您已将字体 slabikar 指向本网站。文件csf-enc.tex
在这里,在这个文件中实现了从Unicode到ISO2的映射。
答案2
答案3
LaTeX 实现。问题是有些字形不在 Unicode 位置。当然,当不在 slabikar 字体中设置文本时,您希望保留位置。
我还添加了对 LuaLaTeX 的支持。请注意,XeLaTeX 不需要\pdfmapline
或类似的东西。
\documentclass{article}
\usepackage{iftex}
\usepackage[czech]{babel}
\usepackage{newunicodechar}
\ifluatex
\pdfextension mapline{=slabikar slabikar <slabikar.pfb}
\fi
\newunicodechar{Č}{\ifslabikar ^^c8\else Č\fi}
\newunicodechar{č}{\ifslabikar ^^e8\else č\fi}
\newunicodechar{Ď}{\ifslabikar ^^cf\else Ď\fi}
\newunicodechar{ď}{\ifslabikar ^^ef\else ď\fi}
\newunicodechar{Ě}{\ifslabikar ^^cc\else ě\fi}
\newunicodechar{ě}{\ifslabikar ^^ec\else ě\fi}
\newunicodechar{Ň}{\ifslabikar ^^d2\else Ň\fi}
\newunicodechar{ň}{\ifslabikar ^^f2\else ň\fi}
\newunicodechar{Ř}{\ifslabikar ^^d8\else Ř\fi}
\newunicodechar{ř}{\ifslabikar ^^f8\else ř\fi}
\newunicodechar{Š}{\ifslabikar ^^a9\else Š\fi}
\newunicodechar{š}{\ifslabikar ^^b9\else š\fi}
\newunicodechar{Ť}{\ifslabikar ^^ab\else Ť\fi}
\newunicodechar{ť}{\ifslabikar ^^bb\else ť\fi}
\newunicodechar{Ů}{\ifslabikar ^^d9\else Ů\fi}
\newunicodechar{ů}{\ifslabikar ^^f9\else ů\fi}
\newunicodechar{Ž}{\ifslabikar ^^ae\else Ž\fi}
\newunicodechar{ž}{\ifslabikar ^^be\else ž\fi}
\DeclareFontFamily{T1}{slabikar}{}
\DeclareFontShape{T1}{slabikar}{m}{n}{<-> s*[2] slabikar}{}
\newif\ifslabikar
\newenvironment{slabikar}
{%
\par\addvspace{\topsep}%
\setlength{\parindent}{0pt}%
\linespread{2}%
\slabikartrue\usefont{T1}{slabikar}{m}{n}%
}
{\par\addvspace{\topsep}}
\begin{document}
\begin{slabikar}
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
Odemyky-zamyky,\\
rozvažte se, jazyky!\\
Povězte mi řeči lidí,\\
co kdo slyší, co kdo vidí.\\
A z~těch slabik, slov a vět\\
vykouzlíme celý svět.
ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž
\end{slabikar}
\noindent
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
\noindent
Odemyky-zamyky,\\
rozvažte se, jazyky!\\
Povězte mi řeči lidí,\\
co kdo slyší, co kdo vidí.\\
A z~těch slabik, slov a vět\\
vykouzlíme celý svět.
\noindent
ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž
\end{document}
这种方法使得角色在slabikar
环境之外不处于活动状态。
\documentclass{article}
\usepackage{iftex}
\usepackage[czech]{babel}
\ifluatex
\pdfextension mapline{=slabikar slabikar <slabikar.pfb}
\fi
\ExplSyntaxOn
\cs_new:Nn \slabikar_Č: { ^^c8 }
\cs_new:Nn \slabikar_č: { ^^e8 }
\cs_new:Nn \slabikar_Ď: { ^^cf }
\cs_new:Nn \slabikar_ď: { ^^ef }
\cs_new:Nn \slabikar_Ě: { ^^cc }
\cs_new:Nn \slabikar_ě: { ^^ec }
\cs_new:Nn \slabikar_Ň: { ^^d2 }
\cs_new:Nn \slabikar_ň: { ^^f2 }
\cs_new:Nn \slabikar_Ř: { ^^d8 }
\cs_new:Nn \slabikar_ř: { ^^f8 }
\cs_new:Nn \slabikar_Š: { ^^a9 }
\cs_new:Nn \slabikar_š: { ^^b9 }
\cs_new:Nn \slabikar_Ť: { ^^ab }
\cs_new:Nn \slabikar_ť: { ^^bb }
\cs_new:Nn \slabikar_Ů: { ^^d9 }
\cs_new:Nn \slabikar_ů: { ^^f9 }
\cs_new:Nn \slabikar_Ž: { ^^ae }
\cs_new:Nn \slabikar_ž: { ^^be }
\tl_const:Nn \c_slabikar_chars_tl { Č č Ď ď Ě ě Ň ň Ř ř Š š Ť ť Ů ů Ž ž }
\tl_map_inline:Nn \c_slabikar_chars_tl
{
\char_set_active_eq:Nc #1 { slabikar_#1: }
}
\NewDocumentCommand{\convertslabikar}{}
{
\tl_map_inline:Nn \c_slabikar_chars_tl { \char_set_catcode_active:N ##1 }
}
\ExplSyntaxOff
\DeclareFontFamily{T1}{slabikar}{}
\DeclareFontShape{T1}{slabikar}{m}{n}{<-> s*[2] slabikar}{}
\newenvironment{slabikar}
{%
\par\addvspace{\topsep}%
\setlength{\parindent}{0pt}%
\linespread{2}%
\convertslabikar\usefont{T1}{slabikar}{m}{n}%
}
{\par\addvspace{\topsep}}
\begin{document}
\begin{slabikar}
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
Odemyky-zamyky,\\
rozvažte se, jazyky!\\
Povězte mi řeči lidí,\\
co kdo slyší, co kdo vidí.\\
A z~těch slabik, slov a vět\\
vykouzlíme celý svět.
ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž
\end{slabikar}
\noindent
Jakmile ulehneš, zavřeš oči a uvidíš své ruce,
\noindent
Odemyky-zamyky,\\
rozvažte se, jazyky!\\
Povězte mi řeči lidí,\\
co kdo slyší, co kdo vidí.\\
A z~těch slabik, slov a vět\\
vykouzlíme celý svět.
\noindent
ÁáČčĎďÉéĚěÍíŇňÓóŘřŠšŤťÚúŮůÝýŽž
\end{document}
答案4
另一种方法是使用支持捷克语的 OpenType 草书字体。这让我陷入了困境。
Yellow Design Studio 的 Sant Elia 字体系列支持捷克语、并且可用免费(但受到限制性许可)。 然而,它仅支持预组合字符(NFC 形式),不支持组合重音符号。并且它的一些捷克字符使用了弃用seac
操作,而 XeTeX 和 LuaTeX 不支持该操作。
解决方案是在 FontForge 中打开字体并保存,不做任何更改。 这会产生一个可以在 XeTeX 或 LuaTeX 中使用的版本。我将其保存为fonts/SantEliaRough-Line-Fixed.otf
。此字体的较暗和较粗版本需要付费,但如果您愿意,可以通过添加 来解决这个问题FakeBold =
。
\documentclass[czech]{article}
\tracinglostchars=2
\usepackage{babel}
\usepackage{fontspec}
\defaultfontfeatures[SantEliaRough-Line-Fixed]{
Path = {./fonts/},
Ligatures = Common,
Style = Swash,
Numbers = OldStyle,
Extension = .otf }
\setmainfont{SantEliaRough-Line-Fixed}
\baselineskip=1.5cm
\begin{document}
Jakmile ulehneš, zavřeš oči a uvidíš své ruce, ...
\end{document}
如果您在 LuaLaTeX 中编译,这可能是增加字体扩展以超过默认值的少数几次之一microtype
:您希望形状看起来不规则。