[Tex/LaTex] How to have figure labels without captions in tufte-book

captionstufte

This question shows how to remove the needless : from a figure with no caption, while leaving the "Figure X" label intact. The solution is to include the
caption package.

Unfortunately, the tufte-book class doesn't seem to like this solution, as shown in the MWE below, which produces the warning:

Package caption Warning: \caption will not be redefined since it's already
(caption)                redefined by a document class or package which is
(caption)                unknown to the caption package.
See the caption package documentation for explanation.

This question shows a circumvention that avoids using the caption package, but modifying the MWE to use it instead yields exactly the same output as before.

I don't actually need any captions at all in this document, just figure labels, so anything that gets rid of the darn : and centers the "Figure X" bit would be ideal. Suggestions?

MWE:

\documentclass{tufte-book}
\usepackage{wrapfig}
\usepackage[demo]{graphicx}
%\usepackage{caption}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@makecaption}{#1: #2}{#1}{}{}
\makeatother



\begin{document}
\begin{wrapfigure}{l}{4cm}
  \begin{center}
    \includegraphics[width=3cm]{graphic.pdf}
    \caption[Caption for the list of figures]{}
    \label{fig:figureX}
  \end{center}
\end{wrapfigure}
\begin{wrapfigure}{l}{4cm}
  \begin{center}
    \includegraphics[width=3cm]{graphic.pdf}
    \caption[Caption for the list of figures]{With caption}
    \label{fig:figureX}
  \end{center}
\end{wrapfigure}
\end{document}

Output:
enter image description here

Best Answer

You are patching the wrong command. In the tufte-book class, it is \@caption and the relevant part is originally:

\@tufte@caption@font\@tufte@caption@justification%
\noindent\csname fnum@#1\endcsname: \ignorespaces#3\par%

see the file tufte-common.def.

Sample output

\documentclass{tufte-book}
\usepackage{wrapfig}
\usepackage[demo]{graphicx}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\@caption}{\csname fnum@#1\endcsname: \ignorespaces#3}{\csname fnum@#1\endcsname}{}{}
\makeatother

\begin{document}
\begin{wrapfigure}{l}{4cm}
  \begin{center}
    \includegraphics[width=3cm]{graphic.pdf}
    \caption[Caption for the list of figures]{}
    \label{fig:figureX}
  \end{center}
\end{wrapfigure}
\begin{wrapfigure}{l}{4cm}
  \begin{center}
    \includegraphics[width=3cm]{graphic.pdf}
    \caption[Caption for the list of figures]{With caption}
    \label{fig:figureX}
  \end{center}
\end{wrapfigure}
\end{document}

This is easily adapted to test whether the caption is empty or not, and to center the caption:

\makeatletter
\patchcmd{\@caption}{\csname fnum@#1\endcsname:
\ignorespaces#3}{\Centering
\csname fnum@#1\endcsname\ifblank{#3}{}{: \ignorespaces#3}}{}{}
\makeatother 

Centered sample

Related Question