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