我希望有一个tcolorbox
环境,将前缀“注释:”附加到给定的标题。因此,使用选项
title={My Title}
到这个环境将产生一个标题Note: My Title
。
实现这一点的一种方法是让环境接受两个参数。第一个是通常的tcolorbox
选项,第二个是标题。这就是MyNoteX
下面 MWE 中的环境所做的。然而,我不喜欢这个,因为它的界面不再与我拥有的其他界面相似tcolorbox
。
问题:
如何修改MyNote
环境,使其产生与MyNoteX
更改相同的标题仅有的在序言中?
下面的 MWE 产生以下输出:
但我希望第二个标题与第一个标题一致,而不需要任何变化后 \begin{document}
。
可能的解决方案:
另一种方法是用键值定义我自己的环境,但这需要我在该环境中实现全部tcolorbox
我想要使用的可能选项,并将它们传递给tcolorbox
。我希望有办法修补title
。
代码:
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{lipsum}
\newenvironment{MyNoteX}[2][]{%
\par\noindent\ignorespaces%
\begin{tcolorbox}[
title={Note:~#2},
coltitle=black,
colbacktitle=green!25,
#1
]%
}{%
\end{tcolorbox}%
\ignorespacesafterend%
}
\newenvironment{MyNote}[1][]{%
\par\noindent\ignorespaces%
\begin{tcolorbox}[
title={Note},
coltitle=black,
colbacktitle=orange!25,
#1
]%
}{%
\end{tcolorbox}%
\ignorespacesafterend%
}
\pagecolor{white}
\begin{document}
\begin{MyNoteX}[]{My Title}
This is produced by the \verb|MyNoteX| environment.
\end{MyNoteX}
\begin{MyNote}[title={My Title}]
This is produced by the \verb|MyNote| environment.
Title is \emph{not} correct.
\end{MyNote}
\end{document}
答案1
请参阅此答案末尾的更新...
tcolorbox
\kvtcb@title
在评估密钥后将标题存储在 中title
。添加前缀的一种方法是使用密钥code
并使用\pretocmd
from etoolbox
,即\pretocmd{\kvtcb@title}{Note:~}{}{}
。
在 Ulrike Fischer 提醒我关键之后before title
,其实就简单多了:
before title={Note:~}
这在特殊环境中显示mytitlebox
tcolorbox
,它只有一个可选参数而没有第二个强制参数。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{lipsum}
\newenvironment{MyNoteX}[2][]{%
\par\noindent\ignorespaces%
\begin{tcolorbox}[
title={Note:~#2},
coltitle=black,
colbacktitle=green!25,
#1
]%
}{%
\end{tcolorbox}%
\ignorespacesafterend%
}
\newenvironment{MyNote}[1][]{%
\par\noindent\ignorespaces%
\begin{tcolorbox}[
title={Note},
coltitle=black,
colbacktitle=orange!25,
#1,
]%
}{%
\end{tcolorbox}%
\ignorespacesafterend%
}
\makeatletter
\newtcolorbox{mytitlebox}[1][]{%
nobeforeafter,
coltitle=black,
colbacktitle=orange!25,
code={\noindent},
before title={Note:~},
#1,
}
\makeatother
\pagecolor{white}
\begin{document}
\begin{MyNoteX}[]{My Title}
This is produced by the \verb|MyNoteX| environment.
\end{MyNoteX}
\begin{MyNote}[title={My Title}]
This is produced by the \verb|MyNote| environment.
Title is \emph{not} correct.
\end{MyNote}
\begin{mytitlebox}[title={My Title}]
Foo
\end{mytitlebox}
\end{document}
更新
一种变体,首先评估标题title=Note
,如果没有标题,则重新注入。
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\makeatletter
\newtcolorbox{mytitlebox}[1][]{%
nobeforeafter,
coltitle=black,
colbacktitle=orange!25,
code={\noindent\pgfkeysalsofiltered{#1}%
\expandafter\ifblank\expandafter{\kvtcb@title}{\pgfkeysalsofiltered{title=Note}}{\pgfkeysalsofiltered{title=Note:~}}},
}
\makeatother
\pagecolor{white}
\begin{document}
\begin{mytitlebox}[title={My Title}]
Foo
\end{mytitlebox}
\begin{mytitlebox}[colbacktitle={yellow!20}]
Foo
\end{mytitlebox}
\end{document}