\newtcolorbox{boxProblem}[2][sidebyside=false, lower separated = true]{
colback=purple!5!white,
colframe=violet,
colupper=violet!50!black,
fontupper=\bfseries,
fonttitle=\bfseries,
label = problem #2,
title={#2},#1}
我试图将数学作为标题的一部分传递,如下所示:
\begin{boxProblem}{$(\exists n\in Z)(x^2 + y^2 = z^2)$}
Description
\end{boxProblem}
但它会中断,特别是当数学有等号时。之前的一个问题(tcolorbox 中的标题内的数学) 提出了类似的问题,通过在标题周围添加括号解决了这个问题。这在对标题进行硬编码时有效,但在将其作为参数传递时无效。
有什么建议吗?
答案1
我不知道label=problem #2
该怎么做,因为你没有给你的问题编号。即使是“安全”的标题,如
\begin{boxProblem}{abc}
Description
\end{boxProblem}
\ref{problem abc}
如果使用则不会产生任何内容;\pageref
只会打印一些有意义的内容。
标签应仅包含标准可打印人物或下划线;其他字符实际上是允许的,但诸如这样的控制序列\exists
绝对不允许。我倾向于认为你不会喜欢做类似的事情
\pageref{problem $(\exists n\in Z)(x^2 + y^2 = z^2)$}
无论如何。例如,空格会即使这样做能奏效,
\pageref{problem $(\exists n\in Z)(x^2+y^2=z^2)$}
不会提及所述问题。
一种可能的解决方案是,当标题不是“标签安全”时,使用该xparse
库并为标签添加(带括号的)可选参数。
\documentclass{article}
\usepackage[many]{tcolorbox}
\tcbuselibrary{xparse}
\NewTColorBox{boxProblem}{O{sidebyside=false, lower separated = true} m D(){#2}}{
colback=purple!5!white,
colframe=violet,
colupper=violet!50!black,
fontupper=\bfseries,
fonttitle=\bfseries,
label = {problem #3},
title={#2},
#1
}
\begin{document}
\begin{boxProblem}{abc}
Description
\end{boxProblem}
\begin{boxProblem}{$(\exists n\in Z)(x^2 + y^2 = z^2)$}(FLT)
Description
\end{boxProblem}
\pageref{problem abc}
\pageref{problem FLT}
\end{document}
括号内的文字{problem #3}
用于防止出现=
在标题或可选标签参数中。
或者干脆放弃label=#2
。
答案2
问题的原始版本存在这样的问题:两个参数组合在一起时会被包装成$
符号。当前版本(在输入此内容时)存在这样的问题:您将一些数学内容传递给标签参数。您无法做到这一点(无需多言)。如果您想保留标签并使其独一无二,一种可能性是使用自动计数器。然后,您可以使用可选参数将标签传递给框。
\documentclass{article}
\usepackage{dsfont}
\usepackage{tcolorbox}
\newtcolorbox[auto counter]{boxProblem}[2][sidebyside=false, lower separated = true]{
colback=purple!5!white,
colframe=violet,
colupper=violet!50!black,
fontupper=\bfseries,
fonttitle=\bfseries,
title={#2},#1}
\begin{document}
\begin{boxProblem}[label=abc]{$(\exists n\in \mathds{Z})(x^n + y^n = z^n)$}
Description abc
\end{boxProblem}
\begin{boxProblem}[label=xyz]{$(\exists m\in \mathds{Z})(x^n + y^n = z^n)$}
Description xyz
\end{boxProblem}
Box~\ref{abc} deals with abc and box~\ref{xyz} with xyz.
\end{document}
不用说,还有更多的可能性,特别是与cleveref
和相关的hyperref
。