我有一份包含许多图表的文档;我想打印一份简短版本,其中隐藏一些图表,但我希望图表的全局编号保持不变,并且标签仍然有效。以下是 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
最好将这些可能不可见的图形放在它们自己的环境中。这样你就可以控制它们的管理方式。下面我建议使用类似conditionalfigure
together 来\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][]{}