问题
我正在编写文档,utf8
但必须包含一些在其中编码的文件,而这些文件ISO-8859
导致我的构建崩溃。事实上,我使用的[utf8]{inputenc}
对我的所有文件都很好用,但无法识别那个latin1
文件中的字符。
\inputencoding{latin1}
我尝试在和之间来回切换\inputencoding{utf8}
,但是在随后包含带有特殊字符的文件时出现一些错误utf8
(虽然如果文件不包含这样的字符它可以工作但无论是否将编码切换回都可以utf8
)。
设置
utf8-basic.tex
:utf8
没有特殊字符的文本文件(\lipsum[1]
);utf8-special.tex
:utf8
带有特殊字符的文本文件(“é è à î ô â ê ï ç ù”);latin1.tex
:ISO-8859
带有特殊字符(“é è à î ô â ê ï ç ù”)。
平均能量损失
\documentclass{article}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mwe}
\begin{document}
\input{utf8-special}
\input{utf8-basic}
% \inputencoding{latin1}
\input{latin1}
% \inputencoding{utf8}
% \input{utf8-basic}
% \input{utf8-special}
\end{document}
答案1
问题的根源是 frenchb.ldf 的 catcode 更改:它使冒号处于活动状态。 \inputencoding{utf8} 读取 utf8.def,其中包含依赖于冒号具有 catcode“other”的定义。您可以使用 \shorthandoff 来避免此问题:
\documentclass{article}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mwe}
\begin{document}
\input{utf8-special}
\shorthandoff{:}
\inputencoding{utf8}
\shorthandon{:}
\input{utf8-special}
\end{document}