在另一个文档中复制具有相同编号的图形

在另一个文档中复制具有相同编号的图形

我有一份包含多张图片的大型文档,我想将其中一些图片复制到单独的 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为正确的值。

相关内容