我有一份包含多张图片的大型文档,我想将其中一些图片复制到单独的 pdf 文档中,同时保留它们的显示方式、图片编号以及引文、表格等的参考编号。例如,如果主文档中的图片编号为 1.3,则另一个文档中的图片编号仍为 1.3,尽管另一个文档中不存在图 1.1 和 1.2。标题中的任何参考也同样如此,即:
\caption{Something referencing Table \ref{tab:example} and citing \cite{examplecite}.}
将在两篇文档中显示为“图 1.3:引用表 1.2 并引用 [15] 的内容。”,尽管后一篇文档中没有表 1.1 或引用 1-14。
实现此目的的一种非常手动的方法是将我的序言复制到新的 tex 文档中,仅复制相关图形,然后用\cite{Example}
其实际编号替换 等实例以保留编号,然后使用它来生成我想要的 pdf。这可以工作,但这是一个糟糕的解决方案。
我想知道如何最好地做到这一点。我只是想尝试一些想法,而不是一个完全编码的工作示例,因为我不知道如何为此制作 MWE。
答案1
你想尝试一下xr
。这是一个示意图“长”文件,比如ulysseslong.tex
:
\documentclass{article}
\begin{document}
\section{Test}\label{sec:test}
\begin{figure}[htp]
\centering
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{A caption\label{fig:A}}
\end{figure}
\begin{figure}[htp]
\centering
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{B caption\label{fig:B}}
\end{figure}
\begin{figure}[htp]
\centering
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{C caption with a reference to Section~\ref{sec:test}\label{fig:C}}
\end{figure}
\begin{figure}[htp]
\centering
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{D caption\label{fig:D}}
\end{figure}
\begin{table}[htp]
\centering
\caption{A table caption\label{tab:A}}
\medskip
\begin{tabular}{cc}
a & b \\
c & d
\end{tabular}
\end{table}
\begin{table}[htp]
\centering
\caption{B table caption\label{tab:B}}
\medskip
\begin{tabular}{cc}
a & b \\
c & d
\end{tabular}
\end{table}
\end{document}
以下是“简短”版本,例如ulyssesshort.tex
:
\documentclass{article}
\usepackage{xr}
\externaldocument{ulysseslong}
\makeatletter
\newcommand{\extref}[1]{%
\@namedef{the\@captype}{\ref{#1}}%
}
\makeatother
\begin{document}
\begin{figure}[htp]
\centering\extref{fig:C}
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{C caption with a reference to Section~\ref{sec:test}}
\end{figure}
\begin{figure}[htp]
\centering\extref{fig:D}
\fbox{\rule{0pt}{3cm}\rule{3cm}{0pt}}
\caption{D caption}
\end{figure}
\begin{table}[htp]
\centering\extref{tab:B}
\caption{B table caption}
\medskip
\begin{tabular}{cc}
a & b \\
c & d
\end{tabular}
\end{table}
\end{document}
假设所有的交叉引用都ulysseslong.tex
得到解决,那么处理的输出如下ulyssesshort.tex
:
答案2
如果我理解正确的话,可以做这样的事情:
主要文件
\documentclass{article}
\usepackage{mwe} % just for the example
\let\mtincludegraphics\includegraphics
\renewcommand{\includegraphics}[2][]{%
\mtincludegraphics[#1]{#2}%
\immediate\write\mt{\string\mtfigureinserted{#2}{\thefigure}}}
\newwrite\mt
\AtBeginDocument{\immediate\openout\mt=\jobname.img}
\AtEndDocument{\immediate\closeout\mt}
\begin{document}
\lipsum[1-2]
\begin{figure}
\includegraphics{example-image-a}
\caption{example-image-caption}
\label{imga}
\end{figure}
\lipsum[1-2]
\begin{figure}
\includegraphics{example-image-b}
\caption{example-image-caption}
\label{imgb}
\end{figure}
\lipsum[1-2]
\begin{figure}
\includegraphics{example-image-c}
\caption{example-image-caption}
\label{imgc}
\end{figure}
\end{document}
这会将信息写入外部文件mainfilename.img
新文件
\documentclass{article}
\usepackage{mwe}
\newcommand*{\myimage}{}
\newcommand*{\myfile}{example-image-c}
\newcommand*{\mtfigureinserted}[2]{%
\renewcommand*\myimage{#1}%
\ifx\myimage\myfile
\setcounter{figure}{#2}%
\fi}
\input{newtest.img}
\begin{document}
\lipsum[1-2]
\begin{figure}
\includegraphics{\myfile}
\caption{example-image-caption}
\label{imga}
\end{figure}
\end{document}
只需设置一下\newcommand*{\myfile}{example-image-c}
。
\mtfigureinserted
将把计数器设置figure
为正确的值。