複数の画像を含む大きな文書があり、これらの画像の一部を個別の PDF 文書に複製し、表示方法、図の番号、引用や表などの参照番号を維持したいと考えています。たとえば、メイン文書の図番号が 1.3 の場合、図 1.1 と 1.2 が他の文書に存在しないにもかかわらず、他の文書でも 1.3 のままになります。キャプション内の参照についても同様です。
\caption{Something referencing Table \ref{tab:example} and citing \cite{examplecite}.}
後者の文書には表1.1や引用1~14が存在しないにもかかわらず、両方の文書で「図1.3: 表1.2を参照し[15]を引用しているもの」と表示されます。
これを実現する非常に手動的な方法は、新しい 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
正しい値に設定します。