5

This is about caption package. I read the well-written manual of this package (but not thoroughly, because I am new to LaTex) and found not enough about number(s) associated with caption label. So,

  1. How one can substitute the period between chapter and figure numbers with a custom symbol, say an emdash (i.e. as FIGURE 7—1 and without \renewcommand)?
  2. Likewise, what about putting a custom symbol right before caption number, something like FIGURE P7—1?

And the third question about caption alignment,

  1. Is it possible to align the caption with figure borders (here I mean left border)? How?

This is a typical MWE:

\documentclass{book}

\usepackage{blindtext}
\usepackage[demo]{graphicx}

\usepackage{caption}
    \DeclareCaptionStyle{mystyle}[]{
        name=FIGURE,
        labelsep=newline
        }

\setcounter{chapter}{7}

\begin{document}
    \begin{figure}
        \centering
        \includegraphics[width=10cm]{testimage}
        \captionsetup{style=mystyle}
        \caption{Caption of my figure}
    \end{figure}
\end{document}

And the output,

enter image description here


Of course I read those questions about using emdash instead of period or caption alignment, but if possible I like to use amsmath and caption package only.

Shaqpad
  • 197
  • \DeclareCaptionLabelSeparator{emdash}{\textemdash} for example for the emdash feature ;-) –  Jun 17 '16 at 18:59
  • @ChristianHupfer I appreciate your comment and previous answer, but this put the emdash as a label separator not between chapter and figure numbers. – Shaqpad Jun 17 '16 at 19:37
  • Well, I deleted my answer. It was an error of course –  Jun 17 '16 at 19:41

1 Answers1

4

It depends on how you want the references to be printed.

If you want that the reference to figure or table 7–1 is printed as “7.1”, here's a possibility:

\documentclass{book}

\usepackage{graphicx}
\usepackage{caption}

\makeatletter
\DeclareCaptionLabelFormat{pcdn}{% Prefix Chapter Dash Number
  \MakeUppercase{#1} P\arabic{chapter}--\arabic{\@captype}%
}
\makeatother

\DeclareCaptionStyle{mystyle}{
  labelformat=pcdn,
  labelsep=newline
}

\setcounter{chapter}{7}

\begin{document}

We see in figure~\ref{ei}

\begin{figure}[htp]
\captionsetup{style=mystyle}

\centering

\begin{minipage}{10cm}
\includegraphics[width=\textwidth]{example-image}
\caption{Caption of my figure}\label{ei}
\end{minipage}

\end{figure}

\end{document}

enter image description here

The caption package allows defining various formats; in this case we want to change the format for the label (by default “Figure n” or “Table n”, where n is the number). In the second argument to \DeclareCaptionLabelFormat one can use #1 that stands for the appropriate environment name and #2 for the value of the associated counter. Since we want the label in uppercase, \MakeUppercase{#1} is the obvious choice. However since the number should be typeset in a special way, detached from the reference, we can use explicitly the counters, so P\arabic{chapter}--\arabic{figure} might seem the good choice; we can do better, though: in a float environment, \@captype stands either for figure or for table, so \arabic{\@captype} will expand to the needed counter. Since we're using a command with @ in its name, the code must be surrounded by \makeatletter and \makeatother, see What do \makeatletter and \makeatother do?.


If the reference should be “P7–1” just like in the caption, the code can be simpler.

\documentclass{book}

\usepackage{graphicx}
\usepackage{caption}

\DeclareCaptionLabelFormat{pcdn}{\MakeUppercase{#1} #2}

\renewcommand{\thefigure}{P\arabic{chapter}--\arabic{figure}}

\DeclareCaptionStyle{mystyle}{
  labelformat=pcdn,
  labelsep=newline
}

\setcounter{chapter}{7}

\begin{document}

We see in figure~\ref{ei}

\begin{figure}[htp]
\captionsetup{style=mystyle}

\centering

\begin{minipage}{10cm}
\includegraphics[width=\textwidth]{example-image}
\caption{Caption of my figure}\label{ei}
\end{minipage}

\end{figure}

\end{document}

enter image description here

egreg
  • 1,121,712