考虑一下希腊语
\documentclass{article}
\usepackage[LGR,T1]{fontenc}
\usepackage{textalpha}
\begin{document}
φύσις
\end{document
由于默认字体支持 LGR 编码,因此它可以正确呈现:
我正在寻找偶尔出现的西里尔字母的类似效果。
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
% ? \usepackage
\begin{document}
До свидания!
\end{document}
目前这失败了
LaTeX Error: Command \CYRD unavailable in encoding T1.
我必须手动添加
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\DeclareTextSymbolDefault{\CYRD}{T2A}
\begin{document}
До свидания!
\end{document}
然后它在下一封信时失败:
LaTeX Error: Command \cyro unavailable in encoding T1.
所以
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\DeclareTextSymbolDefault{\CYRD}{T2A}
\DeclareTextSymbolDefault{\cyro}{T2A}
\DeclareTextSymbolDefault{\cyrs}{T2A}
\DeclareTextSymbolDefault{\cyrv}{T2A}
\DeclareTextSymbolDefault{\cyri}{T2A}
\DeclareTextSymbolDefault{\cyrd}{T2A}
\DeclareTextSymbolDefault{\cyra}{T2A}
\DeclareTextSymbolDefault{\cyrn}{T2A}
\DeclareTextSymbolDefault{\cyrya}{T2A}
\begin{document}
До свидания!
\end{document}
我需要一些这样的自动字体编码替换,并且不需要额外的标记。
我试过
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[russian,main=english]{babel}
\begin{document}
До свидания!
\end{document}
但这仍然失败。
这只是pdflatex
个问题。不允许在类型主体中添加额外标记\textcyrillic
。如上所述,我知道该怎么做,但这有点挑剔,我不知道如何处理重音符号(这是可选的;仅要求基本的西里尔字母支持。不需要连字符)。
(从评论中移出)
T1,T2A
替代的建议T2A,T1
存在一个问题,即拉丁重音字母将使用重音宏呈现,并且无法从 PDF 中复制粘贴。以下是 的示例é
:
....\kern -0.27771 (for accent)
....\T2A/cmr/m/n/10 ^^A
....\kern -4.72107 (for accent)
....\T2A/cmr/m/n/10 e
我确实需要支持欧洲语言。通常,文档将使用babel
拉丁语作为主要语言,目标是支持偶尔出现的西里尔字母或单词(无需考虑正确的连字符),同时将开销降至最低,并且正文中无需添加额外标记。
答案1
您自己的答案的变体:
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\makeatletter
\@tfor\next:=%
{А}{а}{Б}{б}{В}{в}{Г}{г}{Д}{д}{Е}{е}
{Ё}{ё}{Ж}{ж}{З}{з}{И}{и}{Й}{й}{К}{к}
{Л}{л}{М}{м}{Н}{н}{О}{о}{П}{п}{Р}{р}
{С}{с}{Т}{т}{У}{у}{Ф}{ф}{Х}{х}{Ц}{ц}
{Ч}{ч}{Ш}{ш}{Щ}{щ}{Ъ}{ъ}{Ы}{ы}{Ь}{ь}
{Э}{э}{Ю}{ю}{Я}{я}%
\do{%
\begingroup\def\IeC{\protect\DeclareTextSymbolDefault}%
\protected@edef\@temp{\endgroup\csname u8:\next\endcsname{X2}}\@temp}
\makeatother
\begin{document}
До свидания! See you soon!
\end{document}
添加您需要的其他西里尔字符。请记住,如果您运行的是旧版 LaTeX(2018-04-01 之前),您还需要\usepackage[utf8]{inputenc}
。
使用 X2 编码,它涵盖了 T2A、T2B 和 T2C 编码中的大量字符:
\documentclass{article}
\usepackage[X2,T1]{fontenc}
\makeatletter
\@tfor\next:=
{Ё} {Ђ} {Є} {Ѕ} {І} {Ј} {Љ} {Њ} {Ћ} {Ў} {Џ} {А} {Б} {В} {Г} {Д}
{Е} {Ж} {З} {И} {Й} {К} {Л} {М} {Н} {О} {П} {Р} {С} {Т} {У} {Ф}
{Х} {Ц} {Ч} {Ш} {Щ} {Ъ} {Ы} {Ь} {Э} {Ю} {Я} {а} {б} {в} {г} {д}
{е} {ж} {з} {и} {й} {к} {л} {м} {н} {о} {п} {р} {с} {т} {у} {ф}
{х} {ц} {ч} {ш} {щ} {ъ} {ы} {ь} {э} {ю} {я} {ё} {ђ} {є} {ѕ} {і}
{ј} {љ} {њ} {ћ} {ў} {џ} {Ѣ} {ѣ} {Ѫ} {ѫ} {Ѵ} {ѵ} {Ґ} {ґ} {Ғ} {ғ}
{Ҕ} {ҕ} {Җ} {җ} {Ҙ} {ҙ} {Қ} {қ} {Ҝ} {ҝ} {Ҟ} {ҟ} {Ҡ} {ҡ} {Ң} {ң}
{Ҥ} {ҥ} {Ҧ} {ҧ} {Ҩ} {ҩ} {Ҫ} {ҫ} {Ҭ} {ҭ} {Ү} {ү} {Ұ} {ұ} {Ҳ} {ҳ}
{Ҵ} {ҵ} {Ҷ} {ҷ} {Ҹ} {ҹ} {Һ} {һ} {Ҽ} {ҽ} {Ҿ} {ҿ} {Ӏ} {Ӄ} {ӄ} {Ӆ}
{ӆ} {Ӈ} {ӈ} {Ӌ} {ӌ} {Ӎ} {ӎ} {Ӕ} {ӕ} {Ә} {ә} {Ӡ} {ӡ} {Ө} {ө}
\do{%
\begingroup\def\IeC{\protect\DeclareTextSymbolDefault}%
\protected@edef\@temp{\endgroup\csname u8:\next\endcsname{X2}}\@temp}
\makeatother
\begin{document}
Ё Ђ Є Ѕ І Ј Љ Њ Ћ Ў Џ А Б В Г Д
Е Ж З И Й К Л М Н О П Р С Т У Ф
Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д
е ж з и й к л м н о п р с т у ф
х ц ч ш щ ъ ы ь э ю я ё ђ є ѕ і
ј љ њ ћ ў џ Ѣ ѣ Ѫ ѫ Ѵ ѵ Ґ ґ Ғ ғ
Ҕ ҕ Җ җ Ҙ ҙ Қ қ Ҝ ҝ Ҟ ҟ Ҡ ҡ Ң ң
Ҥ ҥ Ҧ ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ Ү ү Ұ ұ Ҳ ҳ
Ҵ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ Ҿ ҿ Ӏ Ӄ ӄ Ӆ
ӆ Ӈ ӈ Ӌ ӌ Ӎ ӎ Ӕ ӕ Ә ә Ӡ ӡ Ө ө
\end{document}
令你高兴的是,实现如下expl3
:
\documentclass{article}
\usepackage[X2,T1]{fontenc}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_protected:Nn \__recode:N
{% #1 is \u8:<bytes> which expands to \IeC{<LICR>}
\exp_last_unbraced:No \__recode_aux:nn #1
}
\cs_new_protected:Nn \__recode_aux:nn { \DeclareTextSymbolDefault#2{X2} }
\cs_generate_variant:Nn \__recode:N { c }
\tl_map_inline:nn
{
{Ё} {Ђ} {Є} {Ѕ} {І} {Ј} {Љ} {Њ} {Ћ} {Ў} {Џ} {А} {Б} {В} {Г} {Д}
{Е} {Ж} {З} {И} {Й} {К} {Л} {М} {Н} {О} {П} {Р} {С} {Т} {У} {Ф}
{Х} {Ц} {Ч} {Ш} {Щ} {Ъ} {Ы} {Ь} {Э} {Ю} {Я} {а} {б} {в} {г} {д}
{е} {ж} {з} {и} {й} {к} {л} {м} {н} {о} {п} {р} {с} {т} {у} {ф}
{х} {ц} {ч} {ш} {щ} {ъ} {ы} {ь} {э} {ю} {я} {ё} {ђ} {є} {ѕ} {і}
{ј} {љ} {њ} {ћ} {ў} {џ} {Ѣ} {ѣ} {Ѫ} {ѫ} {Ѵ} {ѵ} {Ґ} {ґ} {Ғ} {ғ}
{Ҕ} {ҕ} {Җ} {җ} {Ҙ} {ҙ} {Қ} {қ} {Ҝ} {ҝ} {Ҟ} {ҟ} {Ҡ} {ҡ} {Ң} {ң}
{Ҥ} {ҥ} {Ҧ} {ҧ} {Ҩ} {ҩ} {Ҫ} {ҫ} {Ҭ} {ҭ} {Ү} {ү} {Ұ} {ұ} {Ҳ} {ҳ}
{Ҵ} {ҵ} {Ҷ} {ҷ} {Ҹ} {ҹ} {Һ} {һ} {Ҽ} {ҽ} {Ҿ} {ҿ} {Ӏ} {Ӄ} {ӄ} {Ӆ}
{ӆ} {Ӈ} {ӈ} {Ӌ} {ӌ} {Ӎ} {ӎ} {Ӕ} {ӕ} {Ә} {ә} {Ӡ} {ӡ} {Ө} {ө}
}
{
\__recode:c { u8: \tl_to_str:n { #1 } }
}
\ExplSyntaxOff
\begin{document}
Ё Ђ Є Ѕ І Ј Љ Њ Ћ Ў Џ А Б В Г Д
Е Ж З И Й К Л М Н О П Р С Т У Ф
Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д
е ж з и й к л м н о п р с т у ф
х ц ч ш щ ъ ы ь э ю я ё ђ є ѕ і
ј љ њ ћ ў џ Ѣ ѣ Ѫ ѫ Ѵ ѵ Ґ ґ Ғ ғ
Ҕ ҕ Җ җ Ҙ ҙ Қ қ Ҝ ҝ Ҟ ҟ Ҡ ҡ Ң ң
Ҥ ҥ Ҧ ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ Ү ү Ұ ұ Ҳ ҳ
Ҵ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ Ҿ ҿ Ӏ Ӄ ӄ Ӆ
ӆ Ӈ ӈ Ӌ ӌ Ӎ ӎ Ӕ ӕ Ә ә Ӡ ӡ Ө ө
\end{document}
答案2
如果不存在包,我可能会做这样的事情:
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\makeatletter
\@tfor\@tempa:=%
{ae}{a}{b}{chrdsc}{chvcrs}{ch}{c}{dje}{dze}{dzhe}{d}{erev}{ery}{e}%
{f}{ghcrs}{gup}{g}{hdsc}{hrdsn}{h}{ie}{ii}{ishrt}{i}{je}%
{kbeak}{kdsc}{kvcrs}{k}{lje}{l}{m}{ndsc}{ng}{nje}{n}{otld}{o}{p}{r}%
{schwa}{sdsc}{sftsn}{shch}{shha}{sh}{s}{tshe}{t}{ushrt}{u}{v}%
{ya}{yhcrs}{yi}{yo}{yu}{y}{zdsc}{zhdsc}{zh}{z}\do{%
\expandafter\DeclareTextSymbolDefault\expandafter
{\csname cyr\@tempa\endcsname}{T2A}%
\expandafter\uppercase\expandafter{\expandafter
\def\expandafter\@tempa\expandafter{\@tempa}}%
\expandafter\DeclareTextSymbolDefault\expandafter
{\csname CYR\@tempa\endcsname}{T2A}%
}%
\makeatother
\DeclareTextSymbolDefault{\CYRpalochka}{T2A}
%\listfiles
\begin{document}
До свидания!
%\makeatletter
%\show\@uclclist
\end{document}
这是基于的正则表达式操作t2aenc.dfu
(我将t2aenc.def
其与也具有\cyrq
、进行了比较\cyrw
,但对 Unicode 西里尔字母块的检查似乎表明它们仅代表拉丁语q
和w
,因此如果文档中没有明确的字体编码更改,它们就无法通过 T2A 编码的 TeX 字体呈现,这是我所希望的“无标记”方法的另一个问题,除了破坏字距调整和不设置连字符之外)。
包含\@uclclist
更多\cyr...
,大概来自utf8enc.dfu
(在文件列表中看不到它,但我猜是因为它是在 TL2018 之后的格式中加载的),因此使用它意味着T2A
错误地为某些字母分配默认字体编码替换。如果文档不包含这样的字母,那就不是问题了……
答案3
以下代码非常 hacky,但它仍然不会让您明确列出所有西里尔命令。这个想法是将列表带到某个地方,并且有一个包含所有命令的大写-小写转换列表。因此,我们可以\cyr*
循环调用所有西里尔宏(列表中还有一些其他宏,例如,,但为它们声明默认编码似乎是无害的)。@uclclist
\DeclareTextSymbolDefault
\OE
\AE
\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\makeatletter
\def\myloop#1{%
\ifx\relax#1
\let\next\relax
\else
\let\next\myloop
\DeclareTextSymbolDefault{#1}{T2A}
\fi
\next}
\expandafter\myloop\@uclclist\relax
\makeatother
\begin{document}
До свидания! é, è, ç, \OE, \ae
\end{document}