在文档中再次使用图形

在文档中再次使用图形

我绘制了一个示意图,我想描述一下我使用几种配置进行的模拟结果。因此,在 XY 部分中,我描述了我使用参数集 A 的案例设置进行的模拟,并参考图 23,其中包含几何草图。

后面在第 XZ 节中,我写了关于使用参数集 B 的案例的模拟。为了避免引用文档中前 10 页的图,我想重复图 23。

我有几个问题:

  • 我应该使用相同的图号吗?如果我重复使用方程式,我\tag{\ref{}}会得到相同的方程式编号。如何使用图来实现这一点?
  • 我可以通过一些乳胶魔法以某种方式重复使用图形标题以避免代码重复吗?
  • 有没有正确的方法可以做到这一点?我打算采用的解决方案是否违反了论文写作的一些风格规则?我知道第 67 页和第 89 页的图 23 感觉很奇怪,但由于这是同一张图,所以在我看来,这是诚实的解决方案。

我知道这些问题

答案1

我将复制图形内容,只需使用进行一些设置以避免出现问题的新环境:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}
\usepackage{hyperref}

% \begin{reusefigure}[<float spec>]{<ref>}
\newenvironment{reusefigure}[2][htbp]
  {\addtocounter{figure}{-1}%
   \renewcommand{\theHfigure}{dupe-fig}% If you're using hyperref
   \renewcommand{\thefigure}{\ref{#2}}% Figure counter is \ref
   %\renewcommand{\thefigure}{\ref{#2} (repeated)}% Figure counter + "(repeated)"
   \renewcommand{\addcontentsline}[3]{}% Avoid placing figure in LoF
   \begin{figure}[#1]}
  {\end{figure}}

\begin{document}

We have Figures~\ref{fig:caption-a},~\ref{fig:caption-b} and~\ref{fig:caption-c}.

\begin{figure}[ht]
  \centering\includegraphics[height=50pt]{example-image-a}
  \caption{A figure caption}\label{fig:caption-a}
\end{figure}

\begin{reusefigure}[ht]{fig:caption-a}
  \centering\includegraphics[height=50pt]{example-image-b}
  \caption{A figure caption}\label{fig:caption-b}
\end{reusefigure}

\begin{figure}[ht]
  \centering\includegraphics[height=50pt]{example-image-c}
  \caption{Another figure}\label{fig:caption-c}
\end{figure}

\end{document}

环境reusefigure采用两个参数。第一个是可选的,类似于常规figure浮点数的浮点规范。第二个是必需的,采用\label要重复使用的图形的。

在重新使用该模型之前,需要调整适当的设置,包括用于hyperref. 避免进入 LoF,因为没有必要。


以下是自动化该过程的实现。使用 构建一个稍后要使用的图形sourcefigure。然后,要重新使用此图形,请在 中指定的\reusefigure[<float spec>]{<ref>}位置使用:<ref>\labelsourcefigure

\documentclass{article}
\usepackage{graphicx,environ}
\usepackage{hyperref}

\NewEnviron{sourcefigure}[1][htbp]{%
  {\let\caption\relax\let\ref\relax
   \renewcommand{\label}[1]{%
    \gdef\sfname{sf:##1}}%
    \setbox1=\hbox{\BODY}}% Capture \label
    \global\expandafter\let\csname\sfname\endcsname\BODY% Capture entire figure
  \begin{figure}[#1]
    \BODY
  \end{figure}
}
\newcommand{\reusefigure}[2][htbp]{%
  {\addtocounter{figure}{-1}%
   \renewcommand{\theHfigure}{dupe-fig}% If you're using hyperref
   \renewcommand{\thefigure}{\ref{#2}}% Figure counter is \ref
   %\renewcommand{\thefigure}{\ref{#2} (repeated)}% Figure counter + "(repeated)"
   \renewcommand{\addcontentsline}[3]{}% Avoid placing figure in LoF
   \renewcommand{\label}[1]{}% Make \label inactive
   \begin{figure}[#1] \csname sf:#2\endcsname \end{figure}}
}

\begin{document}

We have Figures~\ref{fig:caption-a} and~\ref{fig:caption-c}.

\begin{sourcefigure}[ht]
  \centering\includegraphics[height=50pt]{example-image-a}
  \caption{A figure caption}\label{fig:caption-a}
\end{sourcefigure}

\reusefigure[ht]{fig:caption-a}

\begin{figure}[ht]
  \centering\includegraphics[height=50pt]{example-image-c}
  \caption{Another figure}\label{fig:caption-c}
\end{figure}

\end{document}

\label在内部被禁用\reusefigure,因此无法引用重复使用的图形(但肯定不需要)。

答案2

如果您遇到\newenvironment宏问题(需要\protect\expandafter等),您可以尝试:

\begin{figure}
  \centering
  \includegraphics[height=50pt]{example-image-a}
  \caption{Figure A, initial usage}
  \label{fig:a}
\end{figure}

\begin{figure*}
  \centering
  \includegraphics[height=50pt]{example-image-a}
  \caption*{Figure \ref{fig:A}: Figure A, later usage somewhere else}
\end{figure*}

\begin{figure}
  \centering
  \includegraphics[height=50pt]{example-image-b}
  \caption{Figure B, showing that the second usage of figure A does not increase counter}
  \label{fig:b}
\end{figure}

相关内容