![使用带有 tcolorbox 的计数器:Tcbincludegraphics 和 tcbcounter](https://linux22.com/image/447900/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20tcolorbox%20%E7%9A%84%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%9ATcbincludegraphics%20%E5%92%8C%20tcbcounter.png)
我正在为我的大学写一篇论文,我使用 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}