bookdown icon indicating copy to clipboard operation
bookdown copied to clipboard

Custom formatting for figure and table captions

Open wjakethompson opened this issue 5 years ago • 5 comments

This question was originally posted on Stack Overflow and was recommended for a feature request here.

By default, bookdown formats figure and table captions as with a colon (:) between the figure/table number and the caption:

Figure 2.1: Here is a nice figure!

As noted by Yihui on Stack Overflow, this is hardcoded by bookdown in parse_fig_labels().

https://github.com/rstudio/bookdown/blob/5782b2ffaeea5d6ee7f34562b596d55f70824192/R/html.R#L647-L672

It would be nice to be able to control the separator (e.g., use a . or <br/> if we wanted the figure/table number and caption on separate lines).

Relatedly (but maybe a separate issue), it would also be useful to be able to apply CSS to figure/table numbers and captions separately (e.g., bold figure number and italic caption, as required by APA).

Currently, figure captions are all inside a single paragraph tag (e.g., Figure 2.1 here), so it's not possible to apply styling to the elements separately.

<p class="caption">
  Figure 2.1: Here is a nice figure!
</p>

Tables put the table number inside a <span>, so it's possible to style the two pieces separately with CSS in HTML output.

<caption>
  <span id="tab:nice-tab">Table 2.1: </span>
  Here is a nice table!
</caption>

For both figure and table captions in LaTeX output, the {caption} package can be used to apply styling to the individual pieces, as well as set the separator.


By filing an issue to this repo, I promise that

  • [x] I have fully read the issue guide at https://yihui.org/issue/.
  • [x] I have provided the necessary information about my issue.
    • If I'm asking a question, I have already asked it on Stack Overflow or RStudio Community, waited for at least 24 hours, and included a link to my question there.
    • If I'm filing a bug report, I have included a minimal, self-contained, and reproducible example, and have also included xfun::session_info('bookdown'). I have upgraded all my packages to their latest versions (e.g., R, RStudio, and R packages), and also tried the development version: remotes::install_github('rstudio/bookdown').
    • If I have posted the same issue elsewhere, I have also mentioned it in this issue.
  • [x] I have learned the Github Markdown syntax, and formatted my issue correctly.

I understand that my issue may be closed if I don't fulfill my promises.

wjakethompson avatar Aug 21 '20 13:08 wjakethompson

Thanks for the suggestion.

For later reference, this is related to #855 for more flexibility regarding label and numbering.

cderv avatar Mar 30 '21 08:03 cderv

For reference, officedown::rdocx_document() offers an argument to change table caption: https://davidgohel.github.io/officedown/articles/captions.html#sequence-options-1

not for the same purpose but worth noting that it exists.

cderv avatar Mar 31 '21 10:03 cderv

One related issue: I use the figure plotting hook to use an html 5 figure/figcaption tags. I can include the figure-id in the hook, but bookdown's figure numbering misses these cases because the regex looks for a paragraph tag. It would be nice to support <figcaption> too.

tjmahr avatar Aug 11 '21 21:08 tjmahr

@tjmahr can you open a specific feature request for this so we can look into into it and track separately ? Thank you !

cderv avatar Aug 16 '21 09:08 cderv

It would be nice to be able to control the separator (e.g., use a . or <br/> if we wanted the figure/table number and caption on separate lines).

The format is no longer hardcoded and can be customized since bookdown 0.22 (PR #1120). Documentation: https://bookdown.org/yihui/bookdown/internationalization.html Below is an example.

First create _bookdown.yml:

language:
  label:
    fig: !expr function(i) paste0('Figure ', i, '<br/> ')

Then an Rmd file:

---
title: "Test"
output:
  bookdown::html_document2
---

# Section one

```{r, fig.cap='A nice figure.'}
plot(1:10)
```

Relatedly (but maybe a separate issue), it would also be useful to be able to apply CSS to figure/table numbers and captions separately

That should indeed be a separate issue. It should be easy to implement (#1428) but I'm not sure if would break anything.

yihui avatar May 07 '23 03:05 yihui