如何将 xecyr 中定义的西里尔字母(例如\cyra
、\cyrb
)转换为 XeLaTeX 中的大写字母?我尝试过\uppercase
、\MakeUppercase
,\MakeTextUppercase
但都没有用,文本仍然是小写。
\documentclass{article}
\usepackage{textcase}
\usepackage{xecyr}
\usepackage{polyglossia}
\setmainlanguage[spelling=modern]{russian}
\newfontfamily{\cyrillicfont}{cmunrm.otf}[
BoldFont = cmunbx.otf,
ItalicFont = cmunti.otf,
BoldItalicFont = cmunbi.otf]
\begin{document}
\uppercase{\cyra\cyrb}
\MakeUppercase{\cyra\cyrb}
\MakeTextUppercase{\cyra\cyrb}
\end{document}
\cyra
定义为\DeclareUTFcharacter[\UTFencname]{x0430}{\cyra}
,其他字母定义类似。
答案1
您必须将命令添加到使用的列表中\MakeUppercase
:
\documentclass{article}
\usepackage{textcase}
\usepackage{xecyr}
\usepackage{polyglossia}
\setmainlanguage[spelling=modern]{russian}
\newfontfamily{\cyrillicfont}{cmunrm.otf}[
BoldFont = cmunbx.otf,
ItalicFont = cmunti.otf,
BoldItalicFont = cmunbi.otf]
\usepackage{etoolbox}
\makeatletter
\appto\@uclclist{\cyra\CYRA\cyrb\CYRB}
\makeatother
\begin{document}
\MakeUppercase{\cyra\cyrb}
\MakeTextUppercase{\cyra\cyrb}
\end{document}
正如评论中所要求的那样,这里有一种方法可以将 \cyra 重新定义为一个更简单的命令,该命令可以在 中工作\MakeUppercase
。但如果可能有副作用,请谨慎使用。为了避免它更改 xunicode 定义的所有命令,直接加载 xunicode:
\documentclass{article}
\usepackage{textcase}
\usepackage{polyglossia}
\setmainlanguage[spelling=modern]{russian}
\newfontfamily{\cyrillicfont}{cmunrm.otf}[
BoldFont = cmunbx.otf,
ItalicFont = cmunti.otf,
BoldItalicFont = cmunbi.otf]
\usepackage{xunicode}
\usepackage{expl3}
\ExplSyntaxOn
\let\OldDeclareUTFcharacter\DeclareUTFcharacter
\renewcommand\DeclareUTFcharacter[3][]{%
\tl_set:Nx\l_tmpa_tl{\tl_tail:n{#2}}
\tl_set:Nx #3 {\char_generate:nn{"\l_tmpa_tl}{11}}
}
\ExplSyntaxOff
\usepackage{xecyr}
\let\DeclareUTFcharacter\OldDeclareUTFcharacter
\begin{document}
\uppercase{\cyra\cyrb}
\MakeUppercase{\cyra\cyrb}
\MakeTextUppercase{\cyra\cyrb}
\end{document}
答案2
XeLaTeX 需要 Unicode 输入,因此polyglossia
无需为“旧式” LICR 规范加载大小写对应关系。不过,我知道旧版文档可能会存在一些问题。
一个简单的解决方法是加载 T2A 编码,然后立即覆盖它:
\documentclass{article}
\usepackage[T2A,TU]{fontenc}
\usepackage{textcase}
\usepackage{xecyr}
\usepackage{polyglossia}
\setmainlanguage[spelling=modern]{russian}
\setmainfont{cmun}[
Extension = .otf,
UprightFont = *rm,
BoldFont = *bx,
ItalicFont = *ti,
BoldItalicFont = *bi
]
\begin{document}
\MakeUppercase{\cyra\cyrb}
\MakeTextUppercase{\cyra\cyrb}
\end{document}
您可以重新定义 LICR 来指向一个字符,比如
\def\cyra{^^^^0430}
这可以通过使用中的代码来完成t2aenc.dfu
,其中包含如下行
\DeclareUnicodeCharacter{0410}{\CYRA}
使用好的编辑器,可以很容易地将该文件更改为cyrlicr.tex
\newcommand{\RedefineLICR}[2]{\def#2{#1}}
\RedefineLICR{^^^^0401}{\CYRYO}
\RedefineLICR{^^^^0402}{\CYRDJE}
\RedefineLICR{^^^^0404}{\CYRIE}
\RedefineLICR{^^^^0405}{\CYRDZE}
\RedefineLICR{^^^^0406}{\CYRII}
\RedefineLICR{^^^^0407}{\CYRYI}
\RedefineLICR{^^^^0408}{\CYRJE}
\RedefineLICR{^^^^0409}{\CYRLJE}
\RedefineLICR{^^^^040a}{\CYRNJE}
\RedefineLICR{^^^^040b}{\CYRTSHE}
\RedefineLICR{^^^^040e}{\CYRUSHRT}
\RedefineLICR{^^^^040f}{\CYRDZHE}
\RedefineLICR{^^^^0410}{\CYRA}
\RedefineLICR{^^^^0411}{\CYRB}
\RedefineLICR{^^^^0412}{\CYRV}
\RedefineLICR{^^^^0413}{\CYRG}
\RedefineLICR{^^^^0414}{\CYRD}
\RedefineLICR{^^^^0415}{\CYRE}
\RedefineLICR{^^^^0416}{\CYRZH}
\RedefineLICR{^^^^0417}{\CYRZ}
\RedefineLICR{^^^^0418}{\CYRI}
\RedefineLICR{^^^^0419}{\CYRISHRT}
\RedefineLICR{^^^^041a}{\CYRK}
\RedefineLICR{^^^^041b}{\CYRL}
\RedefineLICR{^^^^041c}{\CYRM}
\RedefineLICR{^^^^041d}{\CYRN}
\RedefineLICR{^^^^041e}{\CYRO}
\RedefineLICR{^^^^041f}{\CYRP}
\RedefineLICR{^^^^0420}{\CYRR}
\RedefineLICR{^^^^0421}{\CYRS}
\RedefineLICR{^^^^0422}{\CYRT}
\RedefineLICR{^^^^0423}{\CYRU}
\RedefineLICR{^^^^0424}{\CYRF}
\RedefineLICR{^^^^0425}{\CYRH}
\RedefineLICR{^^^^0426}{\CYRC}
\RedefineLICR{^^^^0427}{\CYRCH}
\RedefineLICR{^^^^0428}{\CYRSH}
\RedefineLICR{^^^^0429}{\CYRSHCH}
\RedefineLICR{^^^^042a}{\CYRHRDSN}
\RedefineLICR{^^^^042b}{\CYRERY}
\RedefineLICR{^^^^042c}{\CYRSFTSN}
\RedefineLICR{^^^^042d}{\CYREREV}
\RedefineLICR{^^^^042e}{\CYRYU}
\RedefineLICR{^^^^042f}{\CYRYA}
\RedefineLICR{^^^^0430}{\cyra}
\RedefineLICR{^^^^0431}{\cyrb}
\RedefineLICR{^^^^0432}{\cyrv}
\RedefineLICR{^^^^0433}{\cyrg}
\RedefineLICR{^^^^0434}{\cyrd}
\RedefineLICR{^^^^0435}{\cyre}
\RedefineLICR{^^^^0436}{\cyrzh}
\RedefineLICR{^^^^0437}{\cyrz}
\RedefineLICR{^^^^0438}{\cyri}
\RedefineLICR{^^^^0439}{\cyrishrt}
\RedefineLICR{^^^^043a}{\cyrk}
\RedefineLICR{^^^^043b}{\cyrl}
\RedefineLICR{^^^^043c}{\cyrm}
\RedefineLICR{^^^^043d}{\cyrn}
\RedefineLICR{^^^^043e}{\cyro}
\RedefineLICR{^^^^043f}{\cyrp}
\RedefineLICR{^^^^0440}{\cyrr}
\RedefineLICR{^^^^0441}{\cyrs}
\RedefineLICR{^^^^0442}{\cyrt}
\RedefineLICR{^^^^0443}{\cyru}
\RedefineLICR{^^^^0444}{\cyrf}
\RedefineLICR{^^^^0445}{\cyrh}
\RedefineLICR{^^^^0446}{\cyrc}
\RedefineLICR{^^^^0447}{\cyrch}
\RedefineLICR{^^^^0448}{\cyrsh}
\RedefineLICR{^^^^0449}{\cyrshch}
\RedefineLICR{^^^^044a}{\cyrhrdsn}
\RedefineLICR{^^^^044b}{\cyrery}
\RedefineLICR{^^^^044c}{\cyrsftsn}
\RedefineLICR{^^^^044d}{\cyrerev}
\RedefineLICR{^^^^044e}{\cyryu}
\RedefineLICR{^^^^044f}{\cyrya}
\RedefineLICR{^^^^0451}{\cyryo}
\RedefineLICR{^^^^0452}{\cyrdje}
\RedefineLICR{^^^^0454}{\cyrie}
\RedefineLICR{^^^^0455}{\cyrdze}
\RedefineLICR{^^^^0456}{\cyrii}
\RedefineLICR{^^^^0457}{\cyryi}
\RedefineLICR{^^^^0458}{\cyrje}
\RedefineLICR{^^^^0459}{\cyrlje}
\RedefineLICR{^^^^045a}{\cyrnje}
\RedefineLICR{^^^^045b}{\cyrtshe}
\RedefineLICR{^^^^045e}{\cyrushrt}
\RedefineLICR{^^^^045f}{\cyrdzhe}
\RedefineLICR{^^^^0490}{\CYRGUP}
\RedefineLICR{^^^^0491}{\cyrgup}
\RedefineLICR{^^^^0492}{\CYRGHCRS}
\RedefineLICR{^^^^0493}{\cyrghcrs}
\RedefineLICR{^^^^0496}{\CYRZHDSC}
\RedefineLICR{^^^^0497}{\cyrzhdsc}
\RedefineLICR{^^^^0498}{\CYRZDSC}
\RedefineLICR{^^^^0499}{\cyrzdsc}
\RedefineLICR{^^^^049a}{\CYRKDSC}
\RedefineLICR{^^^^049b}{\cyrkdsc}
\RedefineLICR{^^^^049c}{\CYRKVCRS}
\RedefineLICR{^^^^049d}{\cyrkvcrs}
\RedefineLICR{^^^^04a0}{\CYRKBEAK}
\RedefineLICR{^^^^04a1}{\cyrkbeak}
\RedefineLICR{^^^^04a2}{\CYRNDSC}
\RedefineLICR{^^^^04a3}{\cyrndsc}
\RedefineLICR{^^^^04a4}{\CYRNG}
\RedefineLICR{^^^^04a5}{\cyrng}
\RedefineLICR{^^^^04aa}{\CYRSDSC}
\RedefineLICR{^^^^04ab}{\cyrsdsc}
\RedefineLICR{^^^^04ae}{\CYRY}
\RedefineLICR{^^^^04af}{\cyry}
\RedefineLICR{^^^^04b0}{\CYRYHCRS}
\RedefineLICR{^^^^04b1}{\cyryhcrs}
\RedefineLICR{^^^^04b2}{\CYRHDSC}
\RedefineLICR{^^^^04b3}{\cyrhdsc}
\RedefineLICR{^^^^04b6}{\CYRCHRDSC}
\RedefineLICR{^^^^04b7}{\cyrchrdsc}
\RedefineLICR{^^^^04b8}{\CYRCHVCRS}
\RedefineLICR{^^^^04b9}{\cyrchvcrs}
\RedefineLICR{^^^^04ba}{\CYRSHHA}
\RedefineLICR{^^^^04bb}{\cyrshha}
\RedefineLICR{^^^^04c0}{\CYRpalochka}
\RedefineLICR{^^^^04d4}{\CYRAE}
\RedefineLICR{^^^^04d5}{\cyrae}
\RedefineLICR{^^^^04d8}{\CYRSCHWA}
\RedefineLICR{^^^^04d9}{\cyrschwa}
\RedefineLICR{^^^^04e8}{\CYROTLD}
\RedefineLICR{^^^^04e9}{\cyrotld}
\endinput
请注意,只能使用“简单”命令(不能使用组合命令),并且第一个参数中的字母(实际上是十六进制数字)必须小写。使用此文件在工作目录中,您可以执行
\documentclass{article}
\usepackage{textcase}
\usepackage{xecyr}
\usepackage{polyglossia}
\setmainlanguage[spelling=modern]{russian}
\setmainfont{cmun}[
Extension = .otf,
UprightFont = *rm,
BoldFont = *bx,
ItalicFont = *ti,
BoldItalicFont = *bi,
]
\input{cyrlicr}
\begin{document}
\MakeUppercase{\cyra\cyrb}
\MakeTextUppercase{\cyra\cyrb}
\end{document}