![Ist es möglich, Abbildungen, Beschriftungen und Grafiken aus anderen Tex-Dateien einzufügen?](https://rvso.com/image/330717/Ist%20es%20m%C3%B6glich%2C%20Abbildungen%2C%20Beschriftungen%20und%20Grafiken%20aus%20anderen%20Tex-Dateien%20einzuf%C3%BCgen%3F.png)
Ich habe zwei .tex
Dateien. Die erste .tex
Datei enthält zwei Abbildungen: Abb.1 und Abb.2. Könnte ich alle Details jeder Abbildung in einer anderen Tex-Datei referenzieren, einschließlich Grafik, Bildunterschrift, Abbildungsnummer...? Vielen Dank an alle
Der Code vonfile1.tex
\documentclass[preprint,12pt, sort&compress]{elsarticle}
\usepackage{graphicx}
\usepackage{caption,subfig}
\begin{document}
This is figure 1
\begin{figure}
\centering \includegraphics[width=0.5\linewidth]{example-image-a}
\caption{This is caption 1}
\label{fig:1}
\end{figure}
\begin{figure}
\centering \includegraphics[width=0.5\linewidth]{example-image-b}
\caption{This is caption 2}
\label{fig:2}
\end{figure}
\end{document}
Imfile2.tex
\documentclass[preprint,12pt, sort&compress]{elsarticle}
\usepackage{graphicx}
\usepackage{caption,subfig}
\usepackage{xcite}
\usepackage{xr-hyper}
\externaldocument{file1}
\begin{document}
Figure \ref{fig:2} is figure in the file1 file. And I want to show it in below
% Figure2
Figure \ref{fig:1} is figure in the file1 file. And I want to show it in below
% Figure1
\end{document}
Antwort1
Aktualisieren!!!
Achtung - massives Code-Golfing steht bevor
Ich habe die figure
Umgebung ein wenig neu definiert und den Inhalt der Abbildung und der Beschriftung sowie das gespeicherte Label erfasst. Dadurch wird eine Datei pro Abbildungsumgebung (nicht pro Beschriftung!) mit dem Namen gespeichert \jobname.figurenumber.fig
und ein Label mit dem Namen gespeichert, figlabel:foo
wobei foo
das Label der Beschriftung angegeben wird.
In der zweiten Datei können Sie \figextref{foo}
dann den gespeicherten Inhalt wieder laden.
Die vorherige Version verwendete die falsche Abbildungsnummer – dies ist nun behoben. Das Problem mit mehrfach definierten Beschriftungen lag am falschen „Namespace“ – das storefig
Paket erlaubt die Angabe eines Treiberpräfixes für die Referenzen. Dies muss \externaldocument
als Option behandelt werden, siehe das Beispiel reffile
dafür. Wenn diese Storefig-Option driverprefix
weggelassen wird, wird das Standardpräfix driver
verwendet.
Ein Engpass ist die Abhängigkeit von hyperref
der Version von \label
und \newlabel
.
... und natürlich funktioniert es nicht für figureless
Zahlen, also für \captionof{...}
Sachen.
treiber.tex
\documentclass[preprint,12pt, sort&compress]{elsarticle}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subfig}
\usepackage[driverprefix=mydriver]{storefig}
\begin{document}
This is figure 1
\begin{figure}
\centering \includegraphics[width=0.5\linewidth]{example-image-a}
\caption{This is caption 1}
\label{fig:1}
\end{figure}
\begin{figure}
\centering \includegraphics[width=0.5\linewidth]{example-image-b}
\caption{This is caption 2}
\label{fig:2}
\end{figure}
\end{document}
reffile.tex-- die Datei, die die gespeicherte Zahl verwendet
\documentclass[preprint,12pt, sort&compress]{elsarticle}
\usepackage{graphicx}
\usepackage{caption,subfig}
\usepackage{xcite}
\usepackage{xr-hyper}
\usepackage[driverprefix=mydriver]{storefig}
\externaldocument[\storefigdriverprefix]{driver}
\begin{document}
Figure \ref{fig:2} is figure in the file1 file. And I what to show it in below
% Now fetch the stuff
\figextref[h]{fig:2}% is figure in the file1 file. And I what to show it in below
\end{document}
Hier ist die geänderte storefig
Paketdatei – sie ermöglicht die korrekte Verwendung externer Referenzen und ruft die Abbildungsnummer aus der externen Datei ab:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{storefig}
\RequirePackage{xkeyval}
\RequirePackage{xparse}
\RequirePackage{refcount}
\RequirePackage{letltxmacro}
\RequirePackage{tcolorbox}
\RequirePackage{hyperref}
\DeclareOptionX{driverprefix}[driver]{%
\gdef\storefig@@driverprefix{#1}%
}
\ExecuteOptionsX{driverprefix=driver}
\ProcessOptionsX
\newcommand{\storefigdriverprefix}{%
\storefig@@driverprefix%
}
\AtBeginDocument{%
\typeout{Package storefig info: Prefix is \storefig@@driverprefix}%
\def\label#1{%
\@bsphack
\begingroup
\def\label@name{#1}%
\xdef\@lastlabel{#1}% My hack!
\label@hook
\protected@write\@auxout{}{%
\string\newlabel{#1}{%
{\@currentlabel}%
{\thepage}%
{\@currentlabelname}%
{\@currentHref}{}%
}%
}%
\endgroup
\@esphack
}%
}
\LetLtxMacro\latex@@figure\figure
\let\latex@@endfigure\endfigure
\AtBeginDocument{%
\RenewDocumentEnvironment{figure}{O{ht}}{%
\latex@@figure[#1]
\begingroup
\tcbverbatimwrite{\jobname.\the\numexpr\value{figure}+1.fig}%
}{\endtcbverbatimwrite\endgroup%
% Now load it again
\input{\jobname.\the\numexpr\value{figure}+1.fig}
\latex@@endfigure%
% Store a general label to the .aux file
\immediate\write\@auxout{%
\string\newlabel{figlabel:\storefig@@driverprefix:\@lastlabel}{{\jobname.\number\value{figure}.fig}{}{}{}{}}%
}%
}
}
\NewDocumentCommand{\figextref}{O{tpb}mo}{%
\begingroup
\IfValueTF{#3}{%
\def\local@driverprefix{#3}%
}{%
\def\local@driverprefix{\storefig@@driverprefix}%
}%
\latex@@figure[#1]
\renewcommand{\thefigure}{\getrefnumber{\local@driverprefix#2}}% Redefine the figure counter output according to the value delivered by \
\InputIfFileExists{\getrefnumber{\local@driverprefix figlabel:\storefig@@driverprefix:#2}}{%
\typeout{Loading file \local@driverprefix figlabel:\storefig@@driverprefix:#2}%
}{%
\typeout{Sorry, not found}%
}
\latex@@endfigure
\endgroup
}
\endinput