问题
“fancyvrb”包中的 VerbatimOut
不能很好地处理 UTF-8 字符。
最小工作示例:
\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{\jobname.test}
é
\end{VerbatimOut}
\input{\jobname.test}
\end{document}
错误信息
使用
pdflatex mini
编译时,会出现错误当上面唯一出现的
é
被其他东西替换时,会发生不同的错误,例如é */
:– 表明在这种情况下,LaTeX 成功读取了一个多字节 UTF-8 字符,但不知道如何处理它(即它是错误的字符)。
实际上,当我手动打开生成的
.test
文件时,它包含字符é
,但是以Latin-1编码!证明: 当我在十六进制编辑器中打开文件时,我得到以下信息:
C3 A9
(对应于 UTF-8 中的 LATIN SMALL LETTER E WITH ACUTE) E9
(对应于Latin-1中的é
) 问题
如何正确设置
VerbatimOut
? filecontents*
(来自“filecontents”)表明它可以工作。不幸的是,我不懂这两个代码,因此无法通过手动复制文件内容中的逻辑来修复fancyvrb的代码。我也不能使用
filecontents*
而不是VerbatimOut
,因为前者在\newenvironment
中不起作用,而后者在Verbatim
中起作用。(哦,顺便说一句: Vanilla
VerbatimOut
而不是ojit_code也可以按预期工作。错误似乎是在写入文件时发生的,而不是在逐字输入时出现的) 最佳答案
您的最终目标是逐字书写符号和重音符号吗?因为你可以这样做:
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
\'{e} \~{e} \`{e} \^{e}
\end{Verbatim}
\end{document}
commandchars 选项允许
\
{
}
字符正常工作。资料来源:http://ctan.mirror.garr.it/mirrors/CTAN/macros/latex/contrib/fancyvrb/fancyvrb.pdf