我正在尝试使用 pgfplotstable 包。我的任务是使用此包在表中创建新列。
这是我的最小工作示例:
\documentclass{article}
\usepackage[]{filecontents}
\usepackage[]{pgfplotstable}
\begin{document}
\begin{filecontents*}{data.txt}
id, Text
10, aaa
20, bbb
30, ccc
40, ddd
\end{filecontents*}
\pgfplotstableread[
col sep=comma
]{data.txt}\loadedtable
\pgfplotstablecreatecol[
create col/assign/.code={%
}]{new}\loadedtable
\begin{table}[H]
\centering
\pgfplotstabletypeset[
string type
]\loadedtable
\end{table}
\end{document}
在结果表中,我的行必须看起来像
id | Text
10, \href{http://example.com/\idcolumn}{\textcolumn}
答案1
您还可以将内容集中在另一列中,然后更改标题名称
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\begin{table}[H]
\centering
\pgfplotstabletypeset[col sep=comma,string type,
columns={id,link},% Declare the column order
create on use/link/.style={create col/assign/.code={%
\edef\temp{\noexpand\href{http://www.example.com/\thisrow{id}/}{\thisrow{Text}}}%
\pgfkeyslet{/pgfplots/table/create col/next content}\temp%
}
},
columns/link/.style={column name=Text}
]{data.csv}
\end{table}
\end{document}
答案2
经过多次实验后,我放弃了 \pgfplotstablemodifyforeachcolumnelement,也无法在表格中运行 \pgfplotstablegetelem,因此我采用了老式的方法并使用了 \csname。
另外,我不确定您是否想查看 \href 或使用 \href,所以我两者都做了。
\documentclass{article}
\usepackage[colorlinks=true]{hyperref}
\usepackage[]{filecontents}
\usepackage[]{pgfplotstable}
\newcounter{row}
\newcount{\total}
\begin{document}
\begin{filecontents*}{data.txt}
id, Text
10, aaa
20, bbb
30, ccc
40, ddd
\end{filecontents*}
\pgfplotstableread[col sep=comma,string type]{data.txt}\loadedtable
\pgfplotstablegetrowsof{\loadedtable}
\total=\pgfplotsretval\relax
\loop
\pgfplotstablegetelem{\therow}{id}\of\loadedtable
\expandafter\let\csname id\therow\endcsname=\pgfplotsretval
\pgfplotstablegetelem{\therow}{Text}\of\loadedtable
\expandafter\let\csname Text\therow\endcsname=\pgfplotsretval
\stepcounter{row}
\ifnum\value{row}<\total\repeat
\begin{table}[th]
\centering
\begin{tabular}{cc}
id & Text \\
\csname id0\endcsname & \verb$\href{http://example.com/$\csname id0\endcsname\verb$}{$\csname Text0\endcsname\verb$}$ \\
\csname id1\endcsname & \verb$\href{http://example.com/$\csname id1\endcsname\verb$}{$\csname Text1\endcsname\verb$}$ \\
\csname id2\endcsname & \verb$\href{http://example.com/$\csname id2\endcsname\verb$}{$\csname Text2\endcsname\verb$}$ \\
\csname id3\endcsname & \verb$\href{http://example.com/$\csname id3\endcsname\verb$}{$\csname Text3\endcsname\verb$}$
\end{tabular}
\end{table}
\begin{table}[th]
\centering
\begin{tabular}{cc}
id & Text \\
\csname id0\endcsname & \href{http://example.com/\csname id0\endcsname}{\csname Text0\endcsname} \\
\csname id1\endcsname & \href{http://example.com/\csname id1\endcsname}{\csname Text1\endcsname} \\
\csname id2\endcsname & \href{http://example.com/\csname id2\endcsname}{\csname Text2\endcsname} \\
\csname id3\endcsname & \href{http://example.com/\csname id3\endcsname}{\csname Text3\endcsname}
\end{tabular}
\end{table}
\end{document}
我修改了解决方案,以便不使用表格。所有需要的信息都通过宏参数或表格本身传递。
\documentclass{article}
\usepackage[colorlinks=true]{hyperref}
\usepackage[]{filecontents}
\usepackage[]{pgfplotstable}
\newcommand{\hreftable}[3]% #1 = id column name, #2 = text column name. #3 = table cname
{\bgroup% allocate registers
\countdef\row=1
\countdef\total=2
\dimendef\idwidth=0
\dimendef\twidth=1
\dimendef\temp=2
\def\sep{\hspace{\arraycolsep}}% distance between columns
%
\settowidth{\idwidth}{#1}% get column widths
\settowidth{\twidth}{#2}%
\pgfplotstablegetrowsof{#3}%
\total=\pgfplotsretval\relax
%
\row=0
\loop
\pgfplotstablegetelem{\the\row}{#1}\of{#3}%
\settowidth{\temp}{\pgfplotsretval}%
\ifdim\temp>\idwidth\relax\idwidth=\temp\fi
\pgfplotstablegetelem{\the\row}{#2}\of{#3}%
\settowidth{\temp}{\pgfplotsretval}%
\ifdim\temp>\twidth\relax\twidth=\temp\fi
\advance\row by 1
\ifnum\row<\total\repeat
%
\parbox{\dimexpr \idwidth+\arraycolsep+\twidth}%
{\makebox[\idwidth]{#1}\sep\makebox[\twidth]{#2}
\row=0
\loop
\pgfplotstablegetelem{\the\row}{#1}\of{#3}%
\let\id=\pgfplotsretval%
\pgfplotstablegetelem{\the\row}{#2}\of{#3}%
\let\text=\pgfplotsretval%
\makebox[\idwidth]{\id}\sep\makebox[\twidth]{\href{http://example.com/\id}{\text}}
\advance\row by 1
\ifnum\row<\total\repeat
}
\egroup}
\begin{document}
\begin{filecontents*}{data.txt}
id, Text
10, aaa
20, bbb
30, ccc
40, ddd
\end{filecontents*}
\pgfplotstableread[col sep=comma,string type]{data.txt}\loadedtable
\hreftable{id}{Text}{\loadedtable}
\end{document}
顺便说一句,我不知道如何从表本身获取列名。我甚至尝试使用 \pgfplotstabletranspose。