![Можно ли вставить рисунок, подпись, графику из другого tex-файла?](https://rvso.com/image/330717/%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D0%B2%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C%20%D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BE%D0%BA%2C%20%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C%2C%20%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D1%83%20%D0%B8%D0%B7%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE%20tex-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3F.png)
У меня есть два .tex
файла. Первый .tex
файл содержит два рисунка: Рис.1 и Рис.2. Могу ли я сделать перекрестную ссылку на все детали каждого рисунка в другом tex-файле, включая графику, подпись, номер рисунка...? Спасибо всем
Кодексfile1.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}
вfile2.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}
решение1
Обновлять!!!
Внимание — предстоит масштабная игра в гольф
figure
Я немного переопределил окружение, захватив содержимое рисунка и подписи, а также сохраненную метку. Это сохранит файл для каждого окружения рисунка (не для подписи!) с именем \jobname.figurenumber.fig
и сохранит метку с именем , figlabel:foo
где foo
метка, присвоенная подписи.
Во втором файле используйте \figextref{foo}
then для загрузки сохраненного содержимого обратно.
В предыдущей версии использовался неправильный номер рисунка — теперь это исправлено. Проблема с множественно определенными метками была вызвана неправильным «пространством имен» — пакет storefig
позволяет указывать префикс драйвера для ссылок. Это должно обрабатываться \externaldocument
как опция, пример reffile
для этого. Если эта опция storefig опущена, используется driverprefix
префикс по умолчанию .driver
Узким местом является зависимость от hyperref
версии \label
и \newlabel
.
... и, конечно, это не сработает для figureless
цифр, т. е. для \captionof{...}
вещей.
драйвер.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-- файл, который использует сохраненную фигуру
\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}
Вот измененный storefig
файл пакета — он позволяет правильно использовать внешние ссылки и извлекает номер рисунка из внешнего файла:
\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