原因浮点数不能嵌套在 tcolorbox 中我想要我的(子)图形更加漂亮,我编写了 newFigure
和Subfigure
newtcolorbox 环境。这是我的代码的简化版本
\documentclass[12pt,a4paper]{book}
\usepackage{lipsum}
\usepackage[skins, breakable]{tcolorbox}
\newcommand{\figref}[1]{Figure \ref{fig:#1}}
\newtcolorbox[auto counter]{Figure}[1]{
title = {Figure~\thetcbcounter~$-$ #1}
}
\newtcolorbox[
auto counter,
number within=tcb@cnt@Figure,
number freestyle = {(\noexpand\alph{\tcbcounter})}
]
{Subfigure}[3][]{
width = (\linewidth - 4\dimexpr (#2pt - 1pt)\relax)/#2,
before =,
after = \hfill,
box align = center,
title = {\thetcbcounter~#3},
#1
}
\begin{document}
\begin{Figure}
{Title figure}
\begin{Subfigure}[label={fig:a}]{2}
{Title again}
\lipsum[1]
\end{Subfigure}%
%
\begin{Subfigure}{2}
{A nice Subfigure}
\lipsum[2]
\end{Subfigure}
\end{Figure}
See \figref{a}.
\end{document}
输出
我喜欢这个结果,但我希望打印文本Figure 1a
而不是Figure (a)
,这样就不会改变子图的标题。更准确地说,我可以更改number freestyle
newtcolorbox 的参数以将1a
其作为子图的计数器,但这会将标题更改为(a) blabla
我1a blabla
不想要的标题。
hyperref
请注意,即使我从最小工作示例中删除了包,我仍然使用它。
我知道类似问题有人问过,但我不知道这与我的问题有多接近,因为我不明白
\makeatletter
\newcommand{\customlabel}[2]{%
\protected@write \@auxout {}{\string \newlabel {#1}{{#2}{}}}}
\makeatother
是在做...
答案1
您可以使用以下方式更改标签格式\labelformat
(请参阅ltnews30.pdf
了解更多信息):
\documentclass[12pt,a4paper]{book}
\usepackage{lipsum}
\usepackage[skins, breakable]{tcolorbox}
\newcommand{\figref}[1]{Figure \ref{fig:#1}}
\newtcolorbox[auto counter]{Figure}[1]{
title = {Figure~\thetcbcounter~$-$ #1}
}
\newtcolorbox[
auto counter,
number within=tcb@cnt@Figure,
number freestyle = {(\noexpand\alph{\tcbcounter})}
]
{Subfigure}[3][]{
width = (\linewidth - 4\dimexpr (#2pt - 1pt)\relax)/#2,
before =,
after = \hfill,
box align = center,
title = {\thetcbcounter~#3},
#1
}
\labelformat{tcb@cnt@Subfigure}{\arabic{tcb@cnt@Figure}\alph{tcb@cnt@Subfigure}}
\begin{document}
\begin{Figure}
{Title figure}
\begin{Subfigure}[label={fig:a}]{2}
{Title again}
\lipsum[1]
\end{Subfigure}%
%
\begin{Subfigure}{2}
{A nice Subfigure}
\lipsum[2]
\end{Subfigure}
\end{Figure}
See \figref{a}.
\end{document}
顺便说一句:我建议也使用cleveref
而不是定义自己的\figref
。