Дублирование рисунка в другом документе с той же нумерацией

Дублирование рисунка в другом документе с той же нумерацией

У меня есть большой документ с несколькими изображениями, и я хотел бы продублировать некоторые из этих изображений в отдельных документах 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на правильное значение.

Связанный контент