问题

“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

    10-07 23:00