【问题标题】:Sortable table by clicking on headings通过单击标题可排序表
【发布时间】:2014-04-01 12:28:35
【问题描述】:

是否可以在 TeX 中创建一个表格并编译成 PDF,该表格将具有列标题,以便单击它们将按该列对(数字)表格内容进行排序?

我知道您可以在 PDF 中以某种方式使用 Javascript,这可能会允许这样的事情。

有人做过这样的事吗?

【问题讨论】:

  • 我从来没有见过这样的 PDF。不管怎样:这个问题不是以 TeX 为中心的;你会在Stack Overflow获得更好的运气。
  • 您可以通过简单地预先计算“隐藏”页面中的所有排序排列并将标题链接到适当的页面(类似于投影仪覆盖)来避免 javascript 要求(这会限制查看者)
  • @morbusq 如果不需要动态排序,这应该可以通过 OCG 层实现。您在多个 OCG 图层上有不同​​版本的表格。您可以通过单击列标题来切换这些层的可见性。请参阅:tex.stackexchange.com/questions/74877/parindent-in-tikz-nodemirrors.ctan.org/macros/latex/contrib/ocgx/demo-ocgx.pdf 中的颜色模型演示
  • 谢谢@remus;这实际上是一个完全相同的副本,但由于它在另一个 SE 站点上,我不确定如何继续。
  • @morbusg 过了一会儿,我只想告诉你我找到了解决方案。看我的回答。

标签: javascript pdf tabular


【解决方案1】:

在我的评论之后,OCG 层应该可以做到这一点,我刚刚发现 ocg-p 包提供了 ocgtabular 环境,这正是你想要的。

示例取自 ocg-p 文档:

\documentclass{article}
\usepackage[ocgtabular]{ocg-p}
\usepackage{datatool} % will be needed for this example
\usepackage{booktabs} % will be needed for this example
\DTLnewdb{sdata}
\DTLnewrow{sdata}
\DTLnewdbentry{sdata}{Firstname}{John}
\DTLnewdbentry{sdata}{Lastname}{Doe}
\DTLnewdbentry{sdata}{Grade}{5}
\DTLnewrow{sdata}
\DTLnewdbentry{sdata}{Firstname}{Paul}
\DTLnewdbentry{sdata}{Lastname}{Bauer}
\DTLnewdbentry{sdata}{Grade}{1}
\DTLnewrow{sdata}
\DTLnewdbentry{sdata}{Firstname}{Peggy}
\DTLnewdbentry{sdata}{Lastname}{Sue}
\DTLnewdbentry{sdata}{Grade}{3}
\DTLnewrow{sdata}
\DTLnewdbentry{sdata}{Firstname}{Ever}
\DTLnewdbentry{sdata}{Lastname}{Last}
\DTLnewdbentry{sdata}{Grade}{4}
\DTLnewrow{sdata}
\DTLnewdbentry{sdata}{Firstname}{Werner}
\DTLnewdbentry{sdata}{Lastname}{Moshammer}
\DTLnewdbentry{sdata}{Grade}{1}
\begin{document}
This table can be sorted by clicking on the headers:

\begin{ocgtabular}{llc}{sdata}{}
\toprule%
\bfseries \setocgtabularheader{Firstname}{First name}
& \bfseries \setocgtabularheader{Lastname}{Last name}
& \bfseries \setocgtabularheader{Grade}{Grade}
\DTLforeach{sdata}{\first=Firstname, \last=Lastname,\grade=Grade}{%
\DTLiffirstrow{\\ \midrule}{\\}
\first & \last & \grade
}
\\ \bottomrule%
\end{ocgtabular}
\end{document}

【讨论】:

  • 一个非常“TeXnical”的答案 :) 但是这个解决方案有一个重要的脚注:它不会“排序”PDF 中的表格。通常,使用 Javascript 可以进行“排序”,但无法在 PDF 页面上移动文本。此解决方案会预先创建所有已排序的文本,并且在 PDF 查看器中它只会显示和隐藏——它不会实时“排序”。
  • 嗯,问题是从tex.stackexchange.com迁移过来的! ;-) 问题是关于以某种方式呈现数据。背后的技术应该可以忽略不计。当然是从LaTeX 的角度来看。还有一点,一般情况下的Adobe Javascript APIJavascript仅受Adobe查看器AFAIK支持。对OCGs 的支持范围更广。
  • 当然。但我认为重要的是要指出,这不是“在 PDF 中排序”的通用方式。
猜你喜欢
  • 2021-07-30
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多