在另一個文件中複製具有相同編號的圖

在另一個文件中複製具有相同編號的圖

我有一個包含多個圖像的大型文檔,我想將其中一些圖像單獨複製到單獨的 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為正確的值。

相關內容