pgfplotstable 新列 url

pgfplotstable 新列 url

我正在尝试使用 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,所以我两者都做了。

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。

相关内容