我有一个自定义的.sty
编码文件cp1251
,它定义了\RequirePackage[cp1251]{inputenc}
。我使用它以pdflatex
相同的编码进行编译,但是当我尝试使用其他编码编译某个文件时,utf8
我当然会得到错误。我的包如何自动检查文件编码并重新定义参数\RequirePackage[<current file encoding>]{inputenc}
?
简而言之,我需要类似
\if@CurrentFileEncoding=utf8
\RequirePackage[utf8]{inputenc}
\RequirePackage{literat}
\else
\RequirePackage[cp1251]{inputenc}
\RequirePackage{<someotherpackage>}
答案1
您可以使用selinput
;对于这种特殊情况,可以使用西里尔字母,以及一组受限制的编码来查找。
\documentclass{article}
\usepackage{selinput}
\SelectInputEncodingList{utf8,cp1251}
\SelectInputMappings{
cyrd={д},
}
\begin{document}
\inputencodingname
\end{document}
如果文件采用 UTF-8 编码,则编译时将产生
utf8
如果采用 CP1251 编码,
cp1251
将会生产。
然而,您的问题有所不同,而且实际上无法解决。
如果你的包裹有,说
\renewcommand{\chaptername}{Глава}
并且以 CP1251 编码,那么不在 UTF-8 编码的文档中使用此编码的方式,因为 TeX 仅在以下情况下使用输入编码:扩展宏. 当 TeX 存储定义时,这完全不相关。
在这种情况下,\chaptername
将扩展为字符序列
<C3><EB><E0><E2><E0>
(每个<..>
表示一个字符代码)的类别代码为 13,这在 UTF-8 编码的文档中无效。
你可以使用
\RequirePackage[utf8,cp1251]{inputenc}
\inputencoding{cp1251}
在sergiokapone.sty
文件中
\protected@edef\chaptername{Глава}
在代码中,这将使 LaTeX 扩展\chaptername
为
\IeC{\CYRG}\IeC{\cyrl}\IeC{\cyra}\IeC{\cyrv}\IeC{\cyra}
这与编码无关,主文档将使用
\usepackage{sergiokapone}
\inputencoding{utf8} % or cp1251
或者,可能selinput
如之前所示。
但这不是我推荐的。最好的方法是让.sty
文件编码独立;上面的内容\renewcommand
应该是
\renewcommand{\chaptername}{\CYRG\cyrl\cyra\cyrv\cyra}