我的目的是使用该endfloat
包将所有图形(及其标题)提取到一个单独的pdf
文件中。我想使用结合 bash 命令行和 emacs-lisp 的脚本来完成此操作。
我想这样做是因为,在我的文字编辑工作中,我需要将已接受版本的图表(及其标题)与格式化版本的图表进行比较。我知道这不是完美的解决方案(但我认为它在大多数情况下应该有效),所以欢迎提出不同/更好的想法。
这是我的 MWE(mydoc.tex
文件):
\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage[colorlinks=true,
,citecolor=blue
,linkcolor=blue]{hyperref}
\begin{document}
\section{Section 1}
\label{section1}
\blindtext
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-a}
\caption{Dummy caption \cite{1} (see figure~\ref{fig3} in
section~\ref{section3}).\label{fig1}}
\end{figure}
\section{Section 2}
\label{section2}
\blindtext
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-b}
\caption{Dummy caption \cite{2} (see figure~\ref{fig1} in
section~\ref{section1}).\label{fig2}}
\end{figure}
\section{Section 3}
\label{section3}
\blindtext
\blindtext
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-c}
\caption{Dummy caption \cite{3} (see figure~\ref{fig2}
section~\ref{section2}).\label{fig3}}
\end{figure}
\begin{thebibliography}{9}
\bibitem{1}
Dummy bibibtem
\bibitem{2}
Dummy bibibtem
\bibitem{3}
Dummy bibibtem
\end{thebibliography}
\end{document}
首先,我要生成并备份文件
.aux
。我将使用以下命令进行编译:latexmk -pdf mydoc.tex; cp mydoc.aux mydoc-bk.aux
然后我将使用以下命令进行编译:
pdflatex "\nofiles"\ "\AtBeginDocument{\usepackage[figuresonly,nolists]{endfloat}}"\ "\nonstopmode"\ "\input{mydoc.tex}"
生成mydoc.fff
包含以下内容的文件:
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-a}
\caption{Dummy caption \cite{1} (see figure~\ref{fig3} in
section~\ref{section3}).\label{fig1}}
\end{figure}
\efloatseparator
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-b}
\caption{Dummy caption \cite{2} (see figure~\ref{fig1} in
section~\ref{section1}).\label{fig2}}
\end{figure}
\efloatseparator
\begin{figure}[t]
\centering
\includegraphics[width=.49\columnwidth]{example-image-c}
\caption{Dummy caption \cite{3} (see figure~\ref{fig2}
section~\ref{section2}).\label{fig3}}
\end{figure}
\efloatseparator
现在我创建一个新文件:(mynewdoc.tex
这是一个临时解决方案):
\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage[colorlinks=true,
,citecolor=blue
,linkcolor=blue]{hyperref}
\def\efloatseparator{\clearpage}
\begin{document}
\input{mydoc.fff}
\end{document}
我将编译如下:
pdflatex mynewdoc.tex
我的问题是:我可以强制 (pdf)latex 使用备份.aux
文件进行编译以便在最终的 pdf 中获取正确的参考(显然没有有效的链接)吗?
我认为应该.aux
以某种方式禁用文件的写入,因为其中一些labels
已经在外部.aux
文件中定义。
我的解决方案。我通过重命名
.aux
我想要读的内容mynewdoc.aux
并加入\nofiles
序言来解决这个问题。
替代解决方案。我还找到了使用此包的替代解决方案xcomment
。生成正确的.aux
文件后,我将使用以下命令进行编译:
pdflatex -jobname=mydoc \
"\RequirePackage{xcomment} \xcomment{figure}"\
"\nofiles"\
"\AtBeginDocument{\let\oldendfigure\endfigure"\
"\def\endfigure{\oldendfigure\clearpage}}"\
"\input{mydoc.tex}"
我会收到一个警告,因为\nofiles
命令没有生效(有人可以帮我吗?)但生成的pdf
文件不会有问题。
答案1
好的,我编写了两个执行相同操作的 Bash 脚本。
使用该
endfloat
包(我将其命名为 ExtractFiguresEndfloat.sh):#!/bin/bash TexFile=$1 latexmk -pdf $TexFile pdflatex "\nofiles"\ "\AtBeginDocument{\usepackage[figuresonly,nolists]{endfloat}}"\ "\nonstopmode"\ "\input{$TexFile}" pdflatex "\def\efloatseparator{\clearpage}"\ "\nofiles"\ "\let\olddocument\document"\ "\renewcommand{\document}{\olddocument\input{\jobname.fff}\enddocument}"\ "\nonstopmode\input{$TexFile}"
用法:
ExtractFiguresEndfloat.sh file.tex
使用该
xcomment
包(我将其命名为 ExtractFiguresXcomment.sh):#!/bin/bash TexFile=$1 PREPRINT_ID=`basename $TexFile .tex` latexmk -pdf $TexFile pdflatex -jobname=$PREPRINT_ID \ "\RequirePackage{xcomment} \xcomment{figure}"\ "\nofiles"\ "\AtBeginDocument{\let\oldendfigure\endfigure"\ "\def\endfigure{\oldendfigure\clearpage}}"\ "\nonstopmode"\ "\input{$TexFile}"
用法:
ExtractFiguresXcomment.sh file.tex
我在几个文件上进行了测试并且它们可以工作(第一个文件有一个限制,因为endfloat
需要将\end{figure}
字符串放在行首……)。
我得到: