我用它datatool
来读取csv
文件并从中获取值。我还想在章节名称中使用这些值。我对TOC
和页面没有问题。我可以从我的 csv 文件中看到值。但bookmarks
create by hyperref
(我认为)只有PK
/indexes,但没有来自 csv 文件的值。
此外我还收到以下警告:Package hyperref Warning: Token not allowed in a PDF string.
我的 csv 文件中的值只有 A-Za-z0-9 字母,而没有类似的特殊 Unicode 符号\sqrt
。
这是可以显示该问题的示例代码。
%&xelatex
% !TEX program = xelatex
\documentclass{book}
\usepackage{polyglossia}
\usepackage{fontspec}
\usepackage{noto-mono} % to support hyperref package
\usepackage{amsmath,amsthm,amssymb,mathrsfs,amsfonts,dsfont}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=blue,
}
\usepackage{datatool}
\author{Some}
\title{Any}
\begin{filecontents*}{data.csv}
PK,Value
1,Val1
2,Val2
\end{filecontents*}
\DTLloaddb{values}{data.csv}
\ExplSyntaxOn
\NewDocumentCommand{\getValue}{m}{\DTLfetch{values}{PK}{#1}{Value}}
\ExplSyntaxOff
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{AAA \getValue{1}}
\chapter{BBB \getValue{2}}
\end{document}
答案1
您的 \getValue 命令不可扩展,并且 \DTLfetch 也不可扩展(大多数数据工具命令都不可扩展)。您需要以一种可扩展的方式存储数据,以便可以检索它们。
\documentclass{book}
\usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=blue,
}
\usepackage{datatool}
\author{Some}
\title{Any}
\begin{filecontents*}[force]{data.csv}
PK,Value
1,Val1
2,Val2
\end{filecontents*}
\DTLloaddb{values}{data.csv}
\ExplSyntaxOn
\prop_new:N\g_sergei_data_prop
\NewDocumentCommand{\storeValue}{mm}{\prop_gput:NVV\g_sergei_data_prop#1#2}
\NewExpandableDocumentCommand{\getValue}{m}{\prop_item:Nn\g_sergei_data_prop{#1}}
\ExplSyntaxOff
\DTLforeach{values}{\mynum=PK,\myval=Value}{\storeValue\mynum\myval}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{AAA \getValue{1}}
\chapter{BBB \getValue{2}}
\end{document}
(prop 是否是正确的数据容器取决于你的实际使用情况)