生成只有图表/表格而没有标题的 PDF 以及只有标题而没有图表/表格的 PDF

生成只有图表/表格而没有标题的 PDF 以及只有标题而没有图表/表格的 PDF

我正在提交期刊论文的最终稿,满足以下要求

  • 所有图表和表格的照相排版副本保存在单个 pdf/ps 文件中(即,生成一个包含稿件中所含所有图表和表格的 ps/pdf 文件)。
  • 单个 pdf/ps 文件中的图形和表格标题(即生成包含所有图形和表格标题的单个 ps/pdf 文件)。
  • [...]
  • 图表的软拷贝,即每个图表为一个文件。

我读到我需要的方式:

  • 一份 PDF 仅包含图表,但显然没有标题。我假设每页包含一个图表或表格。
  • 一个只带标题的 PDF。每页一个也可以吗?
  • 每个图表或表格一个 PDF 或其他文件。
    这样没问题,因为我的所有图表或表格都是直接 PDF 或使用standalone类完成的。

有没有一种简单的方法可以隐藏除figures 和table不带 s 之外的所有内容\caption?然后只对标题执行相同操作?我猜endfloat处理完标题后,使用然后剪切 PDF 的最后几页会有效,但直接生成仅包含数字的 PDF 的方法会更好!

答案1

这是一个可行的方法。首先,主文档(更改\iftrue\iffalse将可以正常排版,包含图形和表格。

\documentclass{article}

\iftrue % change to \iffalse for production version
\usepackage{expl3,environ}
\makeatletter
\newsavebox{\@gobblefloatbox}
\newif\ifcrazy@label
\def\crazy@label#1{\gdef\crazy@thislabel{#1}\xdef\crazy@currentlabel{\@currentlabel}\global\crazy@labeltrue}
\let\figure\relax\let\endfigure\relax
\NewEnviron{figure}[1][\fps@figure]{\crazy@float{figure}}
\let\table\relax\let\endtable\relax
\NewEnviron{table}[1][\fps@table]{\crazy@float{table}}
\def\crazy@float#1{%
  \csname crazy_save:nn\expandafter\endcsname\expandafter{\BODY}{#1}%
  \begin{lrbox}{\@gobblefloatbox}\begin{minipage}{\textwidth}%
  \renewcommand{\caption}[2][]{\refstepcounter{#1}##2}%
  \let\label\crazy@label
  \BODY
  \end{minipage}\end{lrbox}%
  \ifcrazy@label\edef\@currentlabel{\crazy@currentlabel}\label{\crazy@thislabel}\global\crazy@labelfalse\fi
}
\ExplSyntaxOn
\seq_new:N \g_crazy_floats_seq

\cs_new:Npn \crazy_save:nn #1 #2
 {
  \seq_gput_right:Nn \g_crazy_floats_seq { \begin{#2} #1 \end{#2} }
 }
\iow_new:N \crazy_output_w
\cs_new:Npn \crazy_write:
 {
  \iow_open:Nn \crazy_output_w { \c_job_name_tl.ftl }
  \seq_map_inline:Nn \g_crazy_floats_seq
   { \iow_now:Nn \crazy_output_w { ##1 } }
  \iow_close:N \crazy_output_w
 }
\AtEndDocument{\crazy_write:}
\ExplSyntaxOff
\fi

\usepackage{kantlipsum}

\begin{document}

\author{A. U. Thor}
\title{A crazy article}

\maketitle

\section{A section}

\kant[1-2]

\begin{figure}[tp]
\centering
A figure
\caption{A caption}\label{fig:a}
\end{figure}

Here we have a reference to figure \ref{fig:a}

\kant[3-4]

\section{B section}

\kant[1-2]

\begin{table}[tp]
\centering
A table
\caption{A caption\label{tab:b}}
\end{table}

\kant[3-4]

\end{document}

如果调用了文档mydoc.tex,则最后mydoc.ftl将创建一个文件,其中包含所有浮动对象,其顺序按文档中指定的顺序排列。只需创建一个新文档即可

\documentclass{article}
% the necessary packages

\begin{document}
\input{mydoc.ftl}
\end{document}

为图表创建单独的文件很容易;为表格创建单独的文件则比较困难:如果图表数量不是很多,编辑生成的.ftl文件可能是最简单的解决方案。毕竟允许的页数相当有限。


我们在做什么?figuretable环境被重新定义为\NewEnviron首先将其内容保存在 LaTeX3 序列中;然后将相同的内容排版在一个框中,以便建立引用并读取标签;然后该框将被丢弃。最后,收集的材料将在文件中注销.ftl

注意:我特意选择了内部宏作为前缀。也许那些要求遵守这些疯狂要求的人会理解。

相关内容