标题 tcolorbox 内的数学作为参数

标题 tcolorbox 内的数学作为参数
\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

相关内容