是否可以从 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,但用 替换graphics
,floats
将文件另存为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}
然而,这在具有许多浮点数的大文档中肯定会失败(典型的“太多未处理的浮点数”错误)。