TransWikia.com

tcolorbox: newtcbtheorem referencing

TeX - LaTeX Asked by dustin on January 12, 2021

Using newtcbtheorem, how do we reference the created environment?

documentclass{article}
usepackage[most]{tcolorbox}
tcbuselibrary{theorems}
usepackage{cleveref}
crefname{exa}{example}{Example}
Crefname{exa}{Example}{Example}
newtcbtheorem[auto counter, number within = section]
{Example}{Examsmash{p}le}{%                                                        
  breakable,
  fonttitle = bfseries,
  colframe = blue!75!black,
  colback = blue!10
}{exa}
begin{document}
begin{Example}{Example}{exam}
  Some example
end{Example}
noindent
Cref{exa:exam}
end{document}

Using tcbmaketheorem, I used newcounter{exa}, but I can’t get referencing to work here.

3 Answers

You need to define the format for the new object; in this case, for tcb@cnt@Example, using something like

crefformat{tcb@cnt@Example}{example~#2#1#3}
Crefformat{tcb@cnt@Example}{Example~#2#1#3}

or any other format you want. A complete example:

documentclass{article}
usepackage[most]{tcolorbox}
usepackage{cleveref}

makeatletter
crefformat{tcb@cnt@Example}{example~#2#1#3}
Crefformat{tcb@cnt@Example}{Example~#2#1#3}
makeatother
newtcbtheorem[auto counter, number within = section]
{Example}{Examsmash{p}le}{%                                                        
  breakable,
  fonttitle = bfseries,
  colframe = blue!75!black,
  colback = blue!10
}{exa}
begin{document}
begin{Example}{Example}{exam}
  Some example
end{Example}
noindent
Cref{exa:exam} and~cref{exa:exam}

end{document}

enter image description here

The correct name to be used in Crefformat, and crefformat can be obtained from one of the warnings obtained in the original code using Cref without the proper definitions:

LaTeX Warning: Cref reference format for label type `tcb@cnt@Example' undefined on input line 21.

Correct answer by Gonzalo Medina on January 12, 2021

Since tcolorbox version 2.41 (2013/07/23), there is integrated support for the cleveref package. You just have to move crefname and Crefname as options into newtcbtheorem:

documentclass{article}
usepackage[most]{tcolorbox}
tcbuselibrary{theorems}
usepackage{cleveref}
newtcbtheorem[auto counter, number within = section,
  crefname={example}{Example},
  Crefname={Example}{Example} ]
{Example}{Examsmash{p}le}{%
  breakable,
  fonttitle = bfseries,
  colframe = blue!75!black,
  colback = blue!10
}{exa}
begin{document}
begin{Example}{Example}{exam}
  Some example
end{Example}
noindent
Cref{exa:exam} and~cref{exa:exam}.
end{document}

The output is identical to that of the solution of Gonzalo Medina.

Answered by Thomas F. Sturm on January 12, 2021

As of 2020-09-08, the previous offered solutions do not work anymore. The cleveref 4.31 (2020-07-31) documentation provides an example and solution to this problem on page 372: the label type optional argument is used to feed cleveref with the needed name information.

MWE:

documentclass{article}
usepackage{tcolorbox}
tcbuselibrary{theorems}
usepackage{cleveref}

newtcbtheorem{example}{Example}{label type=example}{exa}

begin{document}

begin{example}{title}{label}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
end{example}
Checking if textbf{cleveref} works: cref{exa:label} and Cref{exa:label}.

end{document}

MWE results

Answered by Mathias Pilch on January 12, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP