使用带有 tcolorbox 的计数器:Tcbincludegraphics 和 tcbcounter

使用带有 tcolorbox 的计数器:Tcbincludegraphics 和 tcbcounter

我正在为我的大学写一篇论文,我使用 tcolorbox 包。我试图同时使用 tcbincludegraphics 但使用 tcbcounter,而不是另一个计数器。我想自动化标签,这样我就不需要每次添加 tcbincludegraphics 时都添加标签。这应该会让你感到困惑。这是一个 MWE:

\documentclass[11pt, a4paper, dvipsnames]{book}

\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[many]{tcolorbox}
\usepackage{xcolor}

\newcommand{\myfigure}[2][]{\tcbincludegraphics[title=Figure~{#1}]{#2}}

\begin{document}

\myfigure[test]{latex.png}

\myfigure[test 2]{latex.png}

\end{document}

我在这个 MWE 中寻找的是类似“图 3.5 - 测试”的内容,其中包括计数器和标签,这样我就可以制作类似 \ref{fig:test} 的参考,而 LaTeX 会给我类似“图 3.5”的内容。我在序言中寻找一个自动标签,它采用名称 #1,这样我就不必每次都这样做label{fig:test}label{fig:test 2}等等。

先行致谢 ^^

答案1

据我了解,您不是在寻找标准图形计数器。以下代码使用新计数器mycounter,也用于#1标题和标签。

由于您的第一个参数是可选的,因此我还添加了一个字符串测试来toolbox检查是否#1存在。

\documentclass[11pt, a4paper, dvipsnames]{book}

\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[many]{tcolorbox}
\usepackage{xcolor}
\usepackage{etoolbox}

\newcounter{mycounter}[chapter]
\renewcommand{\themycounter}{\thechapter.\arabic{mycounter}}

\newcommand{\myfigure}[2][]{%
  \ifstrempty{#1}
    {%
      \tcbincludegraphics{#2}%
    }%
    {%
      \tcbincludegraphics[%
          step and label={mycounter}{fig:#1},
          title=Figure~\themycounter:~{#1},
        ]%
        {#2}%
    }%
}

\begin{document}

\chapter{Test}

See \ref{fig:test} and \ref{fig:test 2}.

\myfigure[test]{example-image}

\myfigure[test 2]{example-image-a}

\myfigure{example-image-b}    

\end{document}

更新 2022-03-30:

以下代码使用figure计数器混合到正常图形中。另外,我建议\figref包含一个宏以Figure供参考而不是操作。\the...

\documentclass[11pt, a4paper, dvipsnames]{book}

\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[many]{tcolorbox}
\usepackage{xcolor}
\usepackage{etoolbox}

\newcommand{\myfigure}[2][]{%
  \ifstrempty{#1}
    {%
      \tcbincludegraphics{#2}%
    }%
    {%
      \tcbincludegraphics[%
          step and label={figure}{fig:#1},
          title=Figure~\thefigure:~{#1},
          phantom={\addcontentsline{lof}{section}{\protect\numberline{\thefigure}{#1}}},
        ]%
        {#2}%
    }%
}

\DeclareRobustCommand{\figref}[1]{Figure~\ref{fig:#1}}

\begin{document}

\listoffigures

\chapter{Test}

See \figref{test} and \figref{test 2}.

\myfigure[test]{example-image}

\myfigure[test 2]{example-image-a}

\myfigure{example-image-b}

\end{document}

答案2

capture=hbox选项会自动调整 tcolorbox 的大小以适应其内容,并将blend into=figures其视为tcolorboxes浮点数并与图形计数器关联。此选项不能与一起使用tcbincludegraphics,但 Thomas F. Sturm 提供了另一种解决方案。

\documentclass[11pt, a4paper, dvipsnames]{book}

\usepackage[T1]{fontenc}
\usepackage[many]{tcolorbox}

\newtcolorbox[blend into=figures]{myfig}[2][]{%
    float=htb, capture=hbox, title=#2, label={fig:#2}, 
    every float=\centering, #1
}

\begin{document}

\begin{myfig}{example}
\includegraphics[width=5cm]{example-image}
\end{myfig}

\begin{myfig}{example-b}
\includegraphics[width=4cm]{example-image-b}
\end{myfig}

As you can see in Fig~\ref{fig:example} and Fig~\ref{fig:example-b} \dots

\end{document}

在此处输入图片描述

相关内容