You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bookdown中为补充章节设置独立的图编号规则?

How to Restart Figure Numbering with "S" Prefix in Bookdown Supplemental Sections

Great question! This is a super common need for academic documents using Bookdown, and there are a couple of solid approaches depending on whether you're targeting PDF (most common for journal submissions) or HTML output. Below are step-by-step solutions that work seamlessly with Bookdown's cross-referencing system (\@ref(fig:label)).

For PDF Output (LaTeX-based)

Since journal papers typically require PDF, this is the most widely used solution:

  • Reset LaTeX counters and add prefix
    At the very start of your supplemental section (right after the section heading), insert these LaTeX commands directly into your Rmd file:

    \setcounter{figure}{0}
    \renewcommand{\thefigure}{S\arabic{figure}}
    

    This does two key things:

    1. Resets the figure counter to 0 so your supplemental figures start fresh at 1.
    2. Rewrites the figure number format to include the "S" prefix (e.g., Fig S1, Fig S2).

    Cross-referencing tip: Label your supplemental figures with a consistent prefix (like fig:s-fig1, fig:s-fig2) so you can easily reference them with \@ref(fig:s-fig1) anywhere in your document.

    Optional reset for post-supplemental content: If you have content after the supplemental section that needs regular numbering again, add this at the end of the supplemental section:

    \renewcommand{\thefigure}{\arabic{figure}}
    

For HTML Output

If you need an HTML version of your document, use a custom Knitr hook to handle dynamic numbering:

  • Custom Knitr Hook for Supplemental Figures
    Add this code to your document's setup chunk (the one with echo=FALSE and include=FALSE) to override the default plot numbering behavior:
    knitr::knit_hooks$set(plot = function(x, options) {
      # Check if we're in the supplemental section (adjust the ID match as needed)
      current_section <- knitr::opts_current$get("label")
      is_supplemental <- grepl("supplemental", current_section, ignore.case = TRUE)
      
      if (is_supplemental) {
        # Initialize or increment the supplemental figure counter
        if (!exists("supp_fig_counter", envir = globalenv())) {
          assign("supp_fig_counter", 0, envir = globalenv())
        }
        supp_fig_counter <<- supp_fig_counter + 1
        
        # Build the caption with "S" prefix
        fig_caption <- paste0("Fig S", supp_fig_counter, ": ", options$fig.cap)
        
        # Return formatted HTML for the figure
        paste0(
          '<div class="figure">',
          '<img src="', x, '" alt="', fig_caption, '" style="width:100%;">',
          '<p class="caption">', fig_caption, '</p>',
          '</div>'
        )
      } else {
        # Use Bookdown's default plot handling for regular sections
        knitr::hook_plot_md(x, options)
      }
    })
    
    Setup note: Make sure your supplemental section has a label that includes "supplemental" (e.g., # Supplemental Material {#supplemental}) so the hook can detect it. Cross-referencing works the same way as PDF: use \@ref(fig:s-fig1) to link to your supplemental figures.

Universal Cross-Referencing Best Practice

No matter which output format you use, stick to a consistent labeling convention for supplemental figures (e.g., fig:s- prefix). This makes it easy to distinguish between regular and supplemental figures in your code, and ensures Bookdown's cross-referencing picks up the correct numbering.

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:03:01