从 latex 文件生成包含表格和图形的单独 pdf 文件?

从 latex 文件生成包含表格和图形的单独 pdf 文件?

是否可以从 LaTeX 本身生成论文图表的 PDF 版本?

我看到期刊和会议要求提供单独的表格和图表文件。

问题,提问者提出了一个方法,就是\usepackage{endfloat}把所有图表都推到最后一页,然后用PDF编辑器把PDF的最后几页剪下来。这是一个解决方案,但不是一个好的解决方案。LaTeX应该可以自己做到这一点。

我的想法是编译 LaTeX 文件并生成完整的 PDF 输出,此外还有一个包含前一个 PDF 的所有图表和表格的单独文件。

答案1

以下代码将提取所有图形和浮点数。为了证明这一点,我再次加载了提取的对象\includepdf(参见动画)。

% this file name is extractor.tex
% compile it with pdflatex -shell-escape extractor
\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{template.tex}
\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{mwe}
\usepackage[active,tightpage,\placeholder]{preview}
%\PreviewEnvironment{\placeholder}
\PreviewBorder=12pt\relax


\begin{document}


\lipsum[1]

\begin{table}[htb]
\centering
\begin{tabular}{|lll|}
\hline
    11 & 12 & 13\\
    21 & 22 & 23\\
    31 & 32 & 33\\
    41 & 42 & 43\\
    51 & 52 & 53\\
\hline
\end{tabular}
\caption{A table}
\end{table}


\begin{figure}[htp]
\includegraphics{example-image-a}
\caption{A}\label{a}
\end{figure}

\lipsum[6-10]

\begin{figure}[htp]
\includegraphics{example-image-b}
\caption{A}\label{a}
\end{figure}

\begin{figure}[htp]
\includegraphics{example-image-c}
\caption{A}\label{a}
\end{figure}

\lipsum[16-20]


\end{document}
\end{filecontents*}

\usepackage{pgffor,pdfpages}

\begin{document}

\foreach \x in{graphics,floats}{%
    \immediate\write18{pdflatex -jobname=template-\x\space "\def\noexpand\placeholder{\x} \noexpand\input{template}"}%
    \includepdf[pages=-]{template-\x}%
}

\end{document}

在此处输入图片描述

上述代码只是模拟了您的场景。要将其应用于您的真实场景,请执行以下操作。

步骤1

假设您的输入文件如下。

\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{mwe}

\begin{document}

\lipsum[1]

\begin{table}[htb]
\centering
\begin{tabular}{|lll|}
\hline
    11 & 12 & 13\\
    21 & 22 & 23\\
    31 & 32 & 33\\
    41 & 42 & 43\\
    51 & 52 & 53\\
\hline
\end{tabular}
\caption{A table}
\end{table}

\begin{figure}[htp]
\includegraphics{example-image-a}
\caption{A}\label{a}
\end{figure}

\lipsum[6-10]

\begin{figure}[htp]
\includegraphics{example-image-b}
\caption{A}\label{a}
\end{figure}

\begin{figure}[htp]
\includegraphics{example-image-c}
\caption{A}\label{a}
\end{figure}

\lipsum[16-20]

\end{document}

第2步

插入

\usepackage[active,tightpage,graphics]{preview}
\PreviewBorder=12pt\relax

在您的输入文件中。因此您的输入文件将变为如下形式。

\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{mwe}
\usepackage[active,tightpage,graphics]{preview}
\PreviewBorder=12pt\relax

\begin{document}

\lipsum[1]

\begin{table}[htb]
\centering
\begin{tabular}{|lll|}
\hline
    11 & 12 & 13\\
    21 & 22 & 23\\
    31 & 32 & 33\\
    41 & 42 & 43\\
    51 & 52 & 53\\
\hline
\end{tabular}
\caption{A table}
\end{table}

\begin{figure}[htp]
\includegraphics{example-image-a}
\caption{A}\label{a}
\end{figure}

\lipsum[6-10]

\begin{figure}[htp]
\includegraphics{example-image-b}
\caption{A}\label{a}
\end{figure}

\begin{figure}[htp]
\includegraphics{example-image-c}
\caption{A}\label{a}
\end{figure}

\lipsum[16-20]

\end{document}

将此输入文件另存为anyfilename-graphics.tex

步骤3

调用pdflatex anyfilename-graphics以获取包含所有提取图形的PDF文件。

步骤4

重复步骤 2,但用 替换graphicsfloats将文件另存为anyfilename-floats.tex。现在用 进行编译pdflatex anyfilename-floats以获取包含所有提取浮点数(图形或表格)的 PDF 文件。

步骤5

完毕!

答案2

\begin{Export}{<type>}和之间的所有内容\end{Export}都写入名为 的外部文件\jobname-<type>#.tex。该文件在文档内部运行,然后 会使用创建的 pdf \includegraphics。该<type>参数并不重要,它只会在有大量表格和/或图形时简化处理。此示例创建外部文件

test.tex         the main document
test-tab1.tex
test-tab1.pdf
test-tab2.tex
test-tab2.pdf
test-fig1.tex
test-fig1.pdf

当然还有.log和文件。如果您需要其他或更多的包来处理表格和图形,则必须扩展.aux该命令。\newcommand\WritePreamble{...

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{graphicx}

\newcounter{extern}
\makeatletter
\renewcommand\FVB@VerbatimOut[1]{%
\@bsphack%
\begingroup
\FV@UseKeyValues%
\FV@DefineWhiteSpace%
\def\FV@Space{\space}%
\FV@DefineTabOut%
\def\FV@ProcessLine##1{%
\toks@{##1}\immediate\write\FV@OutFile{\the\toks@}}%
\immediate\openout\FV@OutFile #1\relax%
\WritePreamble%<<=== write preamble
\let\FV@FontScanPrep\relax
\let\@noligs\relax%
\FV@Scan}
\renewcommand\FVE@VerbatimOut{%<<=== write postamble
\WriteLine{\string\end{document}}% <<
\immediate\closeout\FV@OutFile\endgroup\@esphack}

\newcommand\WriteLine[1]{%
\begingroup%
\let\protect\@unexpandable@protect%
\edef\reserved@a{\immediate\write\FV@OutFile{#1}}%
\reserved@a%
\endgroup}
\makeatother

\newcommand\WritePreamble{%
\WriteLine{\string\documentclass[border=0pt]{standalone}}%
\WriteLine{\string\usepackage{array}}%
\WriteLine{\string\begin{document}}%
}

\newcommand\Export[1]{%
\stepcounter{extern}%
\gdef\externExt{#1}%
\VerbatimEnvironment%
\begin{VerbatimOut}{\jobname-#1\theextern.tex}}

\def\endExport{%
\end{VerbatimOut}
\IfFileExists{\jobname-\externExt\theextern.tex}
  {\typeout{>>>running pdflatex with file \jobname-\externExt\theextern.tex}%
   \immediate\write18{pdflatex --interaction=nonstopmode \jobname-\externExt\theextern}}
  {\fbox{Error in Export!}}%
\IfFileExists{\jobname-\externExt\theextern.pdf}
    {\includegraphics{\jobname-\externExt\theextern}}
    {\fbox{Error in running \jobname-\externExt\theextern.tex~ Try again}}%
}

\begin{document}

foo

\begin{Export}{tab}
\begin{tabular}{ccc}\hline
foo & bar & baz \\\hline
f   & b   & b   \\\hline
\end{tabular}
\end{Export}

bar

\begin{Export}{fig}
\setlength\unitlength{1cm}
\begin{picture}(3,3)
\put(1.5,1.5){\circle*{1}}
\end{picture}
\end{Export}

\begin{table}[!htb]
\centering
\caption{A caption of a tabular}
\begin{Export}{tab}
\begin{tabular}{ccc}\hline
f   & b   & b   \\\hline
foo & bar & baz \\\hline
\end{tabular}
\end{Export}
\end{table}

\end{document}

在此处输入图片描述

答案3

对于所有图表都是浮动的小文档(文章等),一种可能性是修复浮动规则,使这些规则无法实现。例如:

\renewcommand{\textfraction}{1.1} % that is 110% (too much)
\renewcommand{\floatpagefraction}{1}

因此所有浮动元素都必须移至文本末尾。要恢复浮动元素位于文本内,只需注释掉这两行即可。

使用 MWE 来测试此方法是否有效:

\documentclass{article}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage{mwe}
\title{A MWE}
\author{Fran}
\renewcommand{\textfraction}{1.1}
\renewcommand{\floatpagefraction}{1}
\begin{document}
\maketitle

\lipsum[1]

\begin{table}[htb]
\centering
\begin{tabular}{|lll|}
\hline
    11 & 12 & 13\\
    21 & 22 & 23\\
    31 & 32 & 33\\
    41 & 42 & 43\\
    51 & 52 & 53\\
\hline
\end{tabular}
\caption{A table}
\end{table}


\begin{figure}[htp]
\includegraphics{example-image-a}
\caption{A}\label{a}
\end{figure}

\lipsum[6-10]

\begin{figure}[htp]
\includegraphics{example-image-b}
\caption{A}\label{a}
\end{figure}

\begin{figure}[htp]
\includegraphics{example-image-c}
\caption{A}\label{a}
\end{figure}

\lipsum[16-20]

% Table and figures come here 

\renewcommand{\textfraction}{1.1}
\renewcommand{\floatpagefraction}{1}

\end{document}

然而,这在具有许多浮点数的大文档中肯定会失败(典型的“太多未处理的浮点数”错误)。

相关内容