我想重新定义\section
以生成类似以下内容:(需要包tcolorbox
)
\begin{tcolorbox}
1. \hspace*{\fill} Title of the Section \hspace*{\fill}
\end{tcolorbox}
我以为我可以使用该titlesec
软件包来实现这一点。我尝试执行以下操作:
\titleformat{\section}[display]% It's not clear to me why, but any other format except [display] breaks!
{}{}{0em}%
{\begin{tcolorbox}\thesection.\hspace*{\fill}}% 'before' code.
[\hspace*{\fill}\end{tcolorbox}]% 'after' code.
编译器接受了这个,但不是我期望的方式。\section{Title of the Section}
产生以下内容:
我知道它titlesec
确实提供了带框标题选项,但它不是我想要使用的格式。特别是,我更希望标签也位于框中,并且我希望控制tcolorbox
提供给我的框。
我想也许我可以在制度中定义本节标题框的内容titlesec
,然后根据我的喜好进行定义\edef\oldsection\section
和重新定义\section
,但我不清楚如何传递所需的参数\section
。
TL;DR 我想像第一个例子一样将\section
标题放在里面\tcolorbox
,但它不起作用。
答案1
您可能希望使用tcolorbox
带有explicit
选项的加载包,该选项允许您#1
在命令定义中将其用作部分标题的占位符\section
。此外,我认为block
格式更适合这里:
\documentclass{article}
\usepackage{tcolorbox}
\usepackage[explicit]{titlesec}
\titleformat{\section}[block]
{}{}{0em}
{\begin{tcolorbox}
\thesection. \hspace*{\fill} #1 \hspace*{\fill}
\end{tcolorbox}}
\begin{document}
\section{Title of the Section}
\end{document}
为了使带星号的命令也能正常工作\section
:
\documentclass{article}
\usepackage{tcolorbox}
\usepackage[explicit]{titlesec}
\titleformat{\section}[block]
{}{}{0em}
{\begin{tcolorbox}
\thesection. \hspace*{\fill} #1 \hspace*{\fill}
\end{tcolorbox}}
\titleformat{name=\section,numberless}[block]
{}{}{0em}
{\begin{tcolorbox}
\hspace*{\fill} #1 \hspace*{\fill}
\end{tcolorbox}}
\begin{document}
\section*{Title of the Section}
\section{Title of the Section}
\section*{Title of the Section}
\end{document}
正如评论中指出的那样,此解决方案不适用于较长的标题。由于您已经在使用该tcolorbox
软件包,因此您可以稍微增强您的框,使其也适用于较长的标题:
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins}
\usepackage[explicit]{titlesec}
\NewTColorBox{tcsectionbox}{ o }{%
enhanced,
halign=center,
left=\IfValueTF{#1}{10mm}{4mm},
right=4mm,
top=3mm,
bottom=3mm,
boxsep=0mm,
overlay={
\IfValueT{#1}{
\node[anchor=north west, inner xsep=4mm, inner ysep=3mm]
at (interior.north west) {#1};
}
}
}
\titleformat{\section}[block]
{}{}{0em}
{\begin{tcsectionbox}[\thesection.]
#1
\end{tcsectionbox}}
\titleformat{name=\section,numberless}[block]
{}{}{0em}
{\begin{tcsectionbox}
#1
\end{tcsectionbox}}
\begin{document}
\section{A ridiculously long section title that is only used to show that even long titles are working fine}
\section*{A ridiculously long section title that is only used to show that even long titles are working fine}
\section{A short title}
\end{document}