Ist es möglich, Abbildungen, Beschriftungen und Grafiken aus anderen Tex-Dateien einzufügen?

Ist es möglich, Abbildungen, Beschriftungen und Grafiken aus anderen Tex-Dateien einzufügen?

Ich habe zwei .texDateien. Die erste .texDatei 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 figureUmgebung 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.figund ein Label mit dem Namen gespeichert, figlabel:foowobei foodas 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 storefigPaket erlaubt die Angabe eines Treiberpräfixes für die Referenzen. Dies muss \externaldocumentals Option behandelt werden, siehe das Beispiel reffiledafür. Wenn diese Storefig-Option driverprefixweggelassen wird, wird das Standardpräfix driververwendet.

Ein Engpass ist die Abhängigkeit von hyperrefder Version von \labelund \newlabel.

... und natürlich funktioniert es nicht für figurelessZahlen, 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 storefigPaketdatei – 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

Bildbeschreibung hier eingeben

verwandte Informationen