自定义字母 CSV 排序(土耳其字符)

自定义字母 CSV 排序(土耳其字符)

我有一个CSV列出土耳其姓名和年龄。

  1. 我想按字母顺序升序排列。但是,土耳其字符似乎破坏了排序。
  2. 另一个问题是,如果可能的话,如何为列表插入行号。

另外,我使用土耳其字符(çğıöşü)CSV文件,我得到了错误,这就是为什么我不得不使用乳胶代码中的CSV文件。

\documentclass[12pt,a4paper]{article}

\usepackage{booktabs}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[showframe,margin=40mm]{geometry}
\usepackage{longtable}

\begin{filecontents*}{data.csv}
Name,Age
\c{S}eng\"{u}l,17
\c{C}etin,32
H\"{u}seyin,23
B\"{u}lent,41
Ay\c{s}e,27
Ba\c{s}ak,37
\end{filecontents*}

\pagestyle{empty}

\DTLloaddb[keys={Name,Age}]{data}{data.csv}
\DTLsort{Name=ascending}{data}

\begin{document}

\textbf{Turkish Alphabet}: abc\c{c}defgh{\i}ijklmno\"{o}prs\c{s}tu\"{u}vyz

{\tiny
\noindent
\begin{longtable}{ll}
  \toprule
  \bfseries Name &
    \bfseries Age \\
  \midrule
  \DTLforeach{data}{%
    \pname=Name,\pAge=Age}{%
    \pname & \pAge \\
  }
  \\[-\normalbaselineskip] \bottomrule
\end{longtable}
}

\end{document}

答案1

提供的比较处理程序datatool仅执行字符代码比较。TeX 不提供与一般语言环境相关数据(例如 Unicode 通用语言环境数据存储库)的便捷接口。相反,您需要使用可以访问此类信息的外部工具对数据进行预处理。

datatooltk应用程序提供了一种根据特定区域进行排序并将数据保存为可通过包快速输入的格式的\DTLloaddbtex方法datatool

例如,使用data.csv(UTF-8):

Name,Age
Şengül,17
Çetin,32
Hüseyin,23
Bülent,41
Ayşe,27
Başak,37

data.dbtex然后可以使用以下命令创建文件:

datatooltk --csv-encoding UTF-8 --tex-encoding UTF-8 --sort Name --sort-locale tr --csv data.csv --output data.dbtex

这将从 CSV 文件导入数据,根据Name语言标记tr(土耳其语)标识的区域设置根据字段进行排序,并将排序后的数据保存到文件中data.dbtex,现在可以将其加载到文档中:

\documentclass[12pt,a4paper]{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{datatool}
\usepackage{filecontents}
\usepackage[showframe,margin=40mm]{geometry}
\usepackage{longtable}

\pagestyle{empty}

\DTLloaddbtex{\mydata}{data.dbtex}

\begin{document}

\textbf{Turkish Alphabet}: abc\c{c}defgh{\i}ijklmno\"{o}prs\c{s}tu\"{u}vyz

{\tiny
\noindent
\begin{longtable}{ll}
  \toprule
  \bfseries Name &
    \bfseries Age \\
  \midrule
  \DTLforeach{\mydata}{%
    \pname=Name,\pAge=Age}{%
    \pname & \pAge \\
  }
  \\[-\normalbaselineskip] \bottomrule
\end{longtable}
}

\end{document}

仅当数据发生变化时才需要重建文件data.dbtex。这具有加快文档构建速度的附加好处。

土耳其语字母表:abcçdefghıijklmnoöprsştuüvyz 姓名 年龄 Ayşe 27 Başak 37 Bülent 41 Çetin 32 Hüseyin 23 Şengül 17

您可以在 的 GUI 模式中设置--csv-encoding--tex-encoding和等选项的默认值。--sort-localedatatooltk

相关内容