![无法将 utf8 编码与 datatool 一起使用](https://linux22.com/image/257581/%E6%97%A0%E6%B3%95%E5%B0%86%20utf8%20%E7%BC%96%E7%A0%81%E4%B8%8E%20datatool%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8.png)
我正在使用 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
我看到以下解决方案:
从我的评论来看:
- 将第一行替换
.csv
为:,
将标题添加到
\DTLloaddb
命令:\DTLloaddb[headers={á,é}]{data}{data.csv}
- 将第一行替换
使用
lmodern
使用T1字体编码。(受到推崇的)查看
T1.enc
a)我们可以找到以下几行:\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 系列,使用我们现在称为
OT1
和OM
系列的编码),要么独自使用自己的字体。计算机现代文本编码在未经修改的 TeX 中引发了问题,因为连字符不能断开包含命令的单词。即使在那些编码具有必要的基于变音符号的符号
\accent
的西欧语言中,这个缺点也会破坏连续文本的排版。OT1
\accent
答案2
使用fontenc
UTF-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 文件中不需要任何“,”或特殊符号。我在此链接上留下了我的文件示例。供那些有用的人参考。