![塞尔维亚拉丁字母和西里尔字母](https://linux22.com/image/404521/%E5%A1%9E%E5%B0%94%E7%BB%B4%E4%BA%9A%E6%8B%89%E4%B8%81%E5%AD%97%E6%AF%8D%E5%92%8C%E8%A5%BF%E9%87%8C%E5%B0%94%E5%AD%97%E6%AF%8D.png)
我正在使用 fontenc 包来以塞尔维亚拉丁字母(OT1 编码)或塞尔维亚西里尔字母(OT2 编码)编写文本。我的目标是通过编译单个 LaTeX 代码来排版大量正文,并根据使用的 fontenc 编码生成塞尔维亚拉丁输出文本或塞尔维亚西里尔输出文本。然而,这似乎是不可能的,因为从一种 fontenc 编码切换到另一种 fontenc 编码意味着在 LaTeX 代码中使用不同的字母表示。例如,字母 ž(拉丁文)与 ж(西里尔文)相同。然而,它们在 OT1 和 OT2 中必须分别以 \v{z} 和 zh 进行不同的编码。我在下面给出了两个例子,其中同一个句子意思是“也许 Novak Djokovic 可以在红土上赢得与 Nadal 的比赛”,有两个输出(拉丁文和西里尔文),但它们的 LaTeX 代码不幸不同,并且不像想要的那样通用。任何帮助都非常欢迎。提前致谢。
% Example_1
\documentclass{scrartcl}
\usepackage[OT1]{fontenc}
\usepackage[english,serbian]{babel}
\begin{document}
Mo\v{z}da Novak \DJ{}okovi\'{c} mo\v{z}e da osvoji me\v{c} protiv Nadala na \v{s}ljaci.
\end{document}
% Example_2
\documentclass{scrartcl}
\usepackage[OT2]{fontenc}
\usepackage[english,serbian]{babel}
\begin{document}
Mozhda Novak DJokovic1 mozhe da osvoji mech protiv Nadala na shljaci.
\end{document}
答案1
对于塞尔维亚语,最好的选择是使用内容管理系统包。您还将获得西里尔斜体字母的正确斜体形状。
\documentclass{article}
\usepackage{cmsrb}
\usepackage[OT2,T1]{fontenc} %better to use T1, but OT1 will also work
\usepackage[serbian]{babel}
\begin{document}
Mo\v{z}da Novak \DJ{}okovi\'{c} mo\v{z}e da osvoji me\v{c} protiv Nadala na \v{s}ljaci.
\textit{abc\v c\'cdd\v z\dj efghijklljmnnjoprs\v stuvz\v z}
\fontencoding{OT2}\selectfont
Mo\v{z}da Novak \DJ{}okovi\'{c} mo\v{z}e da osvoji me\v{c} protiv Nadala na \v{s}ljaci.
\textit{abc\v c\'cdd\v z\dj efghijklljmnnjoprs\v stuvz\v z}
\end{document}
这也适用于 UTF-8 输入。
答案2
我建议使用 UTF-8 输入。唯一的问题是“Dž”和“dž”应该分别输入\DZ
和\dz
。
\documentclass{article}
\usepackage[OT2,OT1]{fontenc}
\usepackage[english,serbian]{babel}
\DeclareTextCompositeCommand{\v}{OT2}{C}{Ch}
\DeclareTextCompositeCommand{\v}{OT2}{c}{ch}
\DeclareTextCompositeCommand{\v}{OT2}{S}{Sh}
\DeclareTextCompositeCommand{\v}{OT2}{s}{sh}
\DeclareTextCompositeCommand{\v}{OT2}{Z}{Zh}
\DeclareTextCompositeCommand{\v}{OT2}{z}{zh}
\DeclareTextCompositeCommand{\'}{OT2}{C}{C1}
\DeclareTextCompositeCommand{\'}{OT2}{c}{c1}
\DeclareTextCommand{\DJ}{OT2}{Dj}
\DeclareTextCommand{\dj}{OT2}{dj}
\DeclareTextCommand{\DZ}{OT1}{Dž}
\DeclareTextCommand{\DZ}{OT2}{D2}
\DeclareTextCommand{\dz}{OT1}{dž}
\DeclareTextCommand{\dz}{OT2}{d2}
\makeatletter
\g@addto@macro\@uclclist{\dj\DJ\dz\DZ}
\makeatother
\begin{document}
Možda Novak Đoković može da osvoji meć protiv Nadala na šljaci.
{\footnotesize\MakeUppercase{Možda Novak Đoković može da osvoji meć protiv Nadala na šljaci.}\par}
A B C Č Ć D \DZ\ Đ E F G H I J K L Lj M N Nj O P R S Š T U V Z Ž
a b c č ć d \dz\ đ e f g h i j k l lj m n nj o p r s š t u v z ž
\MakeUppercase{a b c č ć d \dz\ đ e f g h i j k l lj m n nj o p r s š t u v z ž}
\bigskip
\fontencoding{OT2}\selectfont
Možda Novak Đoković može da osvoji meć protiv Nadala na šljaci.
{\footnotesize\MakeUppercase{Možda Novak Đoković može da osvoji meć protiv Nadala na šljaci.}\par}
A B V G D Đ E Ž Z I J K L Lj M N Nj O P R S T Ć U F H C Č \DZ\ Š
a b v g d đ e ž z i j k l lj m n nj o p r s t ć u f h c č \dz\ š
\MakeUppercase{a b v g d đ e ž z i j k l lj m n nj o p r s t ć u f h c č \dz\ š}
\end{document}
不过,一个合适的解决方案是使用 XeLaTeX,请参阅https://tex.stackexchange.com/a/44740/4427