重新定义\includegraphics

重新定义\includegraphics

我有一份包含许多图表的文档;我想打印一份简短版本,其中隐藏一些图表,但我希望图表的全局编号保持不变,并且标签仍然有效。以下是 MWE:

\documentclass{article}

\usepackage{graphicx}

\begin{document}

Figure \ref{figure1} shows \ldots

\begin{figure}[ht]
    \centering
    \includegraphics[width=5cm]{figure1.jpg}
    \caption{\label{figure1}}
\end{figure}

Figure \ref{figure2} shows \ldots

\begin{figure}[ht]
    \centering
    \includegraphics[width=5cm]{figure2.jpg}
    \caption{\label{figure2}}
\end{figure}

\end{document}

然后,我想从 PDF 输出中隐藏图 1,但标签figure1仍然有效,并且第二张图片仍然应该编号为 2。可以吗?

我尝试了该comment环境,但是没有效果。

答案1

最好将这些可能不可见的图形放在它们自己的环境中。这样你就可以控制它们的管理方式。下面我建议使用类似conditionalfiguretogether 来\hidefigurestrue隐藏它们,或者\hidefiguresfalse(默认)将它们保留在文档中。

在此处输入图片描述

\documentclass{article}

\usepackage{graphicx,environ}

\newsavebox{\figsavebox}% Box to capture figure content

\newif\ifhidefigures % Conditional to hide figures or keep them in the document

\NewEnviron{conditionalfigure}[1][ht]{%
  \ifhidefigures
    % Hide this figure
    \let\oldlabel\label
    \renewcommand{\label}[1]{\gdef\labelname{##1}}% Store label name
    \renewcommand{\caption}[1]{##1}% Make \caption just print its argument
    \begin{lrbox}{\figsavebox}
      \BODY % Capture enture figure body
    \end{lrbox}
    \refstepcounter{figure}\oldlabel{\labelname}% Step counter with reference and mark with label
  \else
    % Traditional figure environment
    \begin{figure}[#1]
      \BODY
    \end{figure}
  \fi
}

\begin{document}

\hidefigurestrue % Remove conditional figures from document
%\hidefiguresfalse % Keep conditional figures in document (default)

Figure \ref{figure1} shows \ldots

\begin{conditionalfigure}[ht]
  \centering
  \includegraphics[width=5cm]{example-image-a}
  \caption{\label{figure1}}
\end{conditionalfigure}

Figure \ref{figure2} shows \ldots

\begin{figure}[ht]
    \centering
    \includegraphics[width=5cm]{example-image-b}
    \caption{\label{figure2}}
\end{figure}

\end{document}

捕获整个conditionalfigure内容可确保它不会妨碍文档内浮动元素的放置,否则“不可见”浮动元素仍可能占用其上方/下方的空间。

答案2

这是您要找的吗?使用resizebox和,minipage您可以使includegraphics和的caption高度为零。

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}

\begin{document}

Figure \ref{figure1} shows \ldots

\begin{figure}[ht]
    \centering
    \resizebox{!}{0cm}{\begin{minipage}{\textwidth}
    \includegraphics[width=5cm]{example-image-a}
    \caption{}
    \label{figure1}
    \end{minipage}}
\end{figure}

Figure \ref{figure2} shows \ldots

\begin{figure}[ht]
    \centering
    \includegraphics[width=5cm]{example-image-b}
    \caption{}
    \label{figure2}
\end{figure}

\end{document}

答案3

如果标题仍应在 LoF 中生成条目,则可以使用以下内容(部分感谢 @DavidCarlisle 的帮助\immediate\write)。唯一的问题是,如果两个浮点碰巧在同一页上,并且其中一个被隐藏,则 LoF 中条目的顺序可能会被交换。

\documentclass[]{article}

\usepackage[]{graphicx}
\newif\ifhidefigures

\makeatletter
\newenvironment{conditionalfigure}[1][]
  {%
    \ifhidefigures
      \let\zz\write
      \protected\def\write{\immediate\zz}%
      \def\conditionalfigure@start
        {%
          \def\@captype{figure}\setbox0\vbox\bgroup\color@setgroup
        }%
      \def\conditionalfigure@finish
        {%
          \color@endgroup\egroup
        }%
    \else
      \if\relax\detokenize{#1}\relax
        \def\conditionalfigure@start
          {\begin{figure}}%
      \else
        \def\conditionalfigure@start
          {\begin{figure}[#1]}%
      \fi
      \def\conditionalfigure@finish
        {\end{figure}}%
    \fi
    \conditionalfigure@start
  }
  {%
    \conditionalfigure@finish
  }
\makeatother

\begin{document}
\listoffigures
Figure \ref{figure1} shows \ldots

\begin{conditionalfigure}
  \centering
  \includegraphics[width=5cm]{example-image-duck}
  \caption{Figure 1\label{figure1}}
\end{conditionalfigure}

Figure \ref{figure2} shows \ldots

\hidefigurestrue
\begin{conditionalfigure}
    \centering
    \includegraphics[width=5cm]{example-image-b}
    \caption{Figure 2\label{figure2}}
\end{conditionalfigure}
\end{document}

在此处输入图片描述

答案4

重新定义\includegraphics

要隐藏所有图形,请在声明包后(即命令后)添加以下行usepackage。在这里,您重新定义\includegraphics为不执行任何操作,而是显示图形。

\renewcommand{\includegraphics}[2][]{}

相关内容