我刚刚开始使用 csvsimple 包,我注意到国家字母存在问题。问题出现在丹麦字母å
( \aa
) 和Å
( \AA
) 上。在表格之前,这些字母可以正常书写,但在\csvreader
命令之后。它实际上将字母和宏都更改为a
和A
。有人知道这个问题的解决方案吗?
我有以下 csv 文件,
Navn,c,h,r,s
4.2 A,775,693,1.12,1.42
4.2 B,883,756,1.17,1.49
4.3 B,415,768,0.541,0.688
4.3 C,479,656,0.730,0.929
4.3 D,615,712,0.864,1.10
4.3 E,594,781,0.760,0.967
5.1 A,589,763,0.772,0.982
5.1 B,610,762,0.800,1.02
5.3 A,641,762,0.841,1.07
5.3 B,593,751,0.789,1.00
Navn,4.2,4.3,5.1,5.3
s,1.45,0.921,1.00,1.04
我使用以下代码,
\documentclass[danish,12pt,a4paper,twoside,openright]{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[danish]{babel}
\usepackage{float}
\usepackage{csvsimple,booktabs}
\begin{document}
æøå ÆØÅ \aa\AA
\begin{table}[H]
\centering
\csvreader[head to column names,tabular=|l|l|l|l|l|,%
table head=\hline Navn & c & h & r & s\\\hline]%
{Forsoeg/Tabel/ResultatTabel.csv}{}%
{\csvcoli&\csvcolii&\csvcoliii&\csvcoliv&\csvcolv}
\caption{æøå ÆØÅ \aa\AA}
\label{tab:results}
\end{table}
æøå ÆØÅ \aa\AA
\end{document}
生成以下内容
任何帮助都值得感激:)
答案1
发生的事情head to column names
是,根据csvsimple
文件第一行的内容定义控制序列.csv
。具体来说,它定义了\r
(除了\Navn
、\c
和)并执行\h
\s
全球的定义。:-(
因此,\r
被重新定义多次,最终扩展为零。 因此\aa
和\AA
,其定义分别为\r{a}
和\r{A}
,最终分别只给出 'a' 和 'A'。
这背后的想法是能够将该行的当前内容引用为、\Navn
、\c
和\h
,例如使用\r
\s
\Navn & \c & \h & \r & \s
代替
\csvcoli&\csvcolii&\csvcoliii&\csvcoliv&\csvcolv
但是,除非确保列名不与现有宏冲突,否则必须避免这种情况。
删除head to column names
可以避免该问题。
问题在于:
\def\set@csv@autohead{%
\toks0=\expandafter{\csname\csv@current@col\endcsname}%
\toks1=\expandafter{\csname csvcol\romannumeral\c@csvcol\endcsname}%
\edef\csv@temp{\noexpand\gdef\the\toks0{\the\toks1}\noexpand\csv@AtEndLoop{\noexpand\gdef\the\toks0{}}}%
\csv@temp%
}
(第 184-189 行csvsimple.sty
);这\gdef
就是问题所在。
该包至少应该警告列名可能与现有宏冲突;更好的是,它应该保留重新定义的宏的列表,并在操作结束后恢复它们的定义\csvreader
。