encoding problem with \verbatiminput : Package inputenc Error: Unicode char \u8: not set up for use with LaTeX

encoding problem with \verbatiminput : Package inputenc Error: Unicode char \u8: not set up for use with LaTeX

我正在尝试使用 \verbatiminput 导入一些日志文件,以便从我们的日志中自动生成报告。我遇到了一些编码问题。

我的目标:逐字导入一些包含各种特殊字符(包括隐藏字符)的日志文件。

  • 我相信该文件属于 ISO-8859-1。(服务器操作系统是 Windows)
  • 我得到了很多文件。所以通常的解决方案“重写它”/“查找错误的字符”不是一个选项。
  • 我从 mac osx 运行 pdflatex。
  • 我使用以下方法转换了文件(注意 -c 选项可以删除错误的字符)

for file in ./test*/*.txt
do
  iconv -c -f ISO-8859-1 -t utf8 $file  > $file.n1
  mv -f $file.n1 $file 
done

我的 tex 标头:

\usepackage{verbatim}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

我收到的错误信息:

! Package inputenc Error: Unicode char \u8:° not set up for use with LaTeX.

为了解决“程度”问题,我添加了

cat $file.n1 | tr '°' 'º' > $file.n2

然后我在另一个文件上遇到另一个错误,这次带有一个不可见的字符。

! Package inputenc Error: Unicode char \u8: not set up for use with LaTeX.

我首先尝试不转换文件并将它们导入为 T1/latin1 或 LY1/ascinew,但出现了错误

! Package inputenc Error: Keyboard character used is undefined
(inputenc)                in inputencoding `latin1'.

在不同的文件上。

我的问题:

  • 有没有办法忽略/替换所有有故障的字符?
  • 来自 LaTeX ?来自 shell ?
  • 使用“tr”还是“iconv”?
  • 我在导入文件/进行转换时做错了什么吗?
  • 使用哪种编码会让我遇到的问题更少?

欢迎任何帮助,因为我已经两天没有解决这个问题了。

PS:我的问题不是特定于度数符号,而是 LaTeX 无法打印出的 unicode 字符。

答案1

是的,你可以更换有故障的字符。你可以°\ensuremath{^\circ}

或者添加到你的 latex 标题中:

\newcommand{\degree}{\ensuremath{^\circ}}
\DeclareUnicodeCharacter{B0}{\degree}

或者您可以使用xelatex,那么就没有必要了,\usepackage[utf8]{inputenc}因为它已经utf8内置了完整的支持。

编码没有问题,但 Latex 不知道如何处理 unicode 符号:D

答案2

该字符实际上并未包含在模块°所作的定义中。utf8inputenc

\usepackage{textcomp} % for \textdegree
\usepackage{newunicodechar} % for \newunicodechar
\newunicodechar{°}{\textdegree}

或者,你可以使用“手工制作的符号”

\newunicodechar{°}{\ensuremath{{}^\circ}}

它将在文本和数学模式下起作用(并且textcomp不需要)。

其优点newunicodechar是它不需要知道我们想要为其定义命令的字符的 Unicode 点。

当然,“程度”的情况只是一个例子:您可以添加所需的所有字符。

但是,如果你的文件Latin-1 编码(ISO 8859-1),您可以在输入之前尝试切换到此编码:

\usepackage[latin1,utf8]{inputenc} % utf8 is default
\newcommand{\latinoneverbatiminput}{%
  \begingroup\inputencoding{latin1}\verbatiminput{#1}\endgroup}

然后\latinoneverbatiminput{file}将使用 Latin-1 file

答案3

您不需要重新编码文件。但您必须在加载文件之前声明/更改文件的编码:

\begingroup
\inputencoding{whatever}
\verbatiminput{file}
\endgroup

I don't know what value you should use for "whatever". On windows I would at first try "ansinew" (latin1 has a less chars declared).

相关内容