csvsimple 命令 csvreader 将国家字母 å 更改为 a

csvsimple 命令 csvreader 将国家字母 å 更改为 a

我刚刚开始使用 csvsimple 包,我注意到国家字母存在问题。问题出现在丹麦字母å( \aa) 和Å( \AA) 上。在表格之前,这些字母可以正常书写,但在\csvreader命令之后。它实际上将字母和宏都更改为aA。有人知道这个问题的解决方案吗?

我有以下 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

相关内容