我正在提交期刊论文的最终稿,满足以下要求:
- 所有图表和表格的照相排版副本保存在单个 pdf/ps 文件中(即,生成一个包含稿件中所含所有图表和表格的 ps/pdf 文件)。
- 单个 pdf/ps 文件中的图形和表格标题(即生成包含所有图形和表格标题的单个 ps/pdf 文件)。
- [...]
- 图表的软拷贝,即每个图表为一个文件。
我读到我需要的方式:
- 一份 PDF 仅包含图表,但显然没有标题。我假设每页包含一个图表或表格。
- 一个只带标题的 PDF。每页一个也可以吗?
- 每个图表或表格一个 PDF 或其他文件。
这样没问题,因为我的所有图表或表格都是直接 PDF 或使用standalone
类完成的。
有没有一种简单的方法可以隐藏除figure
s 和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
文件可能是最简单的解决方案。毕竟允许的页数相当有限。
我们在做什么?figure
和table
环境被重新定义为\NewEnviron
首先将其内容保存在 LaTeX3 序列中;然后将相同的内容排版在一个框中,以便建立引用并读取标签;然后该框将被丢弃。最后,收集的材料将在文件中注销.ftl
。
注意:我特意选择了内部宏作为前缀。也许那些要求遵守这些疯狂要求的人会理解。