无法将 utf8 编码与 datatool 一起使用

无法将 utf8 编码与 datatool 一起使用

我正在使用 datatool 来管理表格,当文件data.csv(编码为 UTF-8 或 ANSI)包含“á”之类的字符时,我会收到错误。我可以通过data.csv编码为 ANSI 并使用 来解决{\'a}这个问题,但这样做太无聊了。有趣的是,如果我添加\usepackage[T1]{fontenc},我可以编码data.csv为 UTF-8 并使用“á”之类的字符而不会出现问题,但字体看起来非常丑陋。

file.tex

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\begin{document}
The quick brown fox jumps over the lazy dog
á é õ ç {\c{c}} {\~a}
\begin{table}
    \DTLloaddb{data}{data.csv}
    \DTLdisplaydb{data}
\end{table}
\end{document}

data.csv

a,e
a,c

data.csv

{'/a},{'/e}
{\~a},{\c{c}}

data.csv

á,é
ã,ç

答案1

我看到以下解决方案:

  1. 从我的评论来看

    • 将第一行替换.csv为:,
    • 将标题添加到\DTLloaddb命令:

      \DTLloaddb[headers={á,é}]{data}{data.csv}
      
  2. 使用lmodern使用T1字体编码。(受到推崇的)

  3. 查看T1.enca)我们可以找到以下几行:

    \DeclareTextAccent{\'}{T1}{1}
    % … and much later …
    \DeclareTextComposite{\'}{T1}{a}{225}
    \DeclareTextComposite{\'}{T1}{e}{233}
    

    如果我们尝试将其复制为 OT1 编码,则不会得到任何单个字符(但它可以编译!)因为在位置 225 (E1 16 ) 或 233 (E9 16 )处没有任何字形OT1 字体编码但事实上他们T1 字体编码

    TeX 在使用时实际上做了什么\'e
    它将特殊重音符号设置为 13 16 (19 10 / ´) 除以 65 16 (101 10 / e)。自己尝试一下:

    \accent19 e
    

    由于 TeX 知道这是一个特殊的重音符号,因此它可以将其设置为大写字母的正确形式。但让我们让 TeXbook b) (它并没有完全使用 OT1,而是使用具有“相当”相同布局c)的字体编码)自己说话:

    附录 B 显示了纯 TeX 使用 TeX 的\accent原语来处理大多数重音符号。例如,\'#1相当于{\accent19 #1},其中 #1是被重音的参数。一般规则是\accent<number>将重音符号放在下一个字符上;告诉<number>该重音符号出现在当前字体中的位置。

    关于大写字母:

    重音符号被假定正确地定位在高度等于当前字体的 x 高度的字符上;较高或较短的字符会导致重音符号升高或降低,同时充分考虑到重音符和受重音符字体的倾斜度。


    第 696 行plain.tex如下所示:

    \def\'#1{{\accent19 #1}}
    

a) b) c)更多内容请参见texmf/tex/latex/base/T1.enc texmf/doc/knuth/texbook.tex.gz
texmf/doc/latex/base/encguide.pdf

在 TeX 3 问世之前,人们很少关注字体编码。在那之前,人们要么使用 Donald Knuth 的字体(Computer Modern 系列,使用我们现在称为OT1OM系列的编码),要么独自使用自己的字体。

计算机现代文本编码在未经修改的 TeX 中引发了问题,因为连字符不能断开包含命令的单词。即使在那些编码具有必要的基于变音符号的符号\accent的西欧语言中,这个缺点也会破坏连续文本的排版。OT1\accent

答案2

使用fontencUTF-8 编码数据似乎是最好的选择。如果您不喜欢该字体,您可以加载一个带有您喜欢的字体的包。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{datatool,tgbonum}
\begin{document}
The quick brown fox jumps over the lazy dog
á é õ ç {\c{c}} {\~a}
\begin{table}
    \DTLloaddb{data}{data.csv}
    \DTLdisplaydb{data}
\end{table}
\end{document}

看起来像这样:

结果

您可以从LaTeX 字体目录

答案3

大家好,我遇到了同样的问题,但我用两行简单的代码解决了这个问题。

\usepackage[T1]{fontenc}

\usepackage[utf8]{inputenc}

我的 csv 文件中不需要任何“,”或特殊符号。我在此链接上留下了我的文件示例。供那些有用的人参考。

数据工具识别口音的示例

相关内容