我是一名老师,我想创建一个文件,收集我在白板上所做的一切,以供参考。
为此,我想使用彩色盒子适用于课程的不同部分。我还希望页面顶部显示它属于哪个课程,以防我以后需要混合某些内容。
\section{}
然而,在 tcolorbox 中使用不知何故并没有转移到\rightmark
最小工作示例:
\documentclass{memoir}
%Font
\usepackage{cmbright}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%Head
\makepagestyle{myheader}
\makeevenhead{myheader}{}{\itshape\textbf{\rightmark}}{}
\makeoddhead{myheader} {}{\itshape\textbf{\rightmark}}{}
\makeheadrule{myheader}{\textwidth}{.5pt}
\pagestyle{myheader}
%Box
\usepackage{tcolorbox}
\tcbuselibrary{breakable, skins}
\begin{document}
\section{This appears on the top}
Test
\vfill
\pagebreak
\tcolorbox
\section{This doesn't}
Test
\endtcolorbox
\pagebreak
\tableofcontents
\end{document}
更新(2023-08-29):从目前的答案来看,它似乎无法做到这一点,因为\sectionmark
在 tcolorbox 内部调用没有传递出去。我在 github 上打开了一个问题这里如果有解决方案,将会更新此帖子。
更新:这个问题无法修复,因为标记命令不留下方框,正如 wueb 和 Alan 所述。正如 Alan 所指出的,给出的两种解决方案都是带有节标记和限制的变通方法。
答案1
Sophanatprime 在 github 上读到我的问题,并提出了一个自创包的解决方案在 tcolorbox 问题。
手动安装他们的包后,\usepackage[tcolorbox]{updatemarks}
问题解决(每个盒子最多两个部分)。
软件包本身可以在他们的 github。
编辑:该包现在可通过 tlmgr 获得。
答案2
这不是一个完美的解决方案,但它确实有效。
\documentclass{memoir}
\makepagestyle{myheader}
\makeevenhead{myheader}{}{\rightmark}{}
\makeoddhead{myheader} {}{\rightmark}{}
\makeheadrule{myheader}{\textwidth}{.5pt}
\pagestyle{myheader}
\usepackage{tcolorbox}
\begin{document}
\section{Section title}
Test
\newpage
\begin{tcolorbox}[before=\sectionmark{Section title in tcolorbox}\noindent]
\section{Section title in tcolorbox}
Test
\end{tcolorbox}
\end{document}
答案3
似乎\sectionmark
在调用(或被)你的 tcolorbox 时设置不正确,请参阅这里。
编辑:添加一个全局计数器,在定义新部分时调用该计数器,如果一部分在 内被调用\tcolorbox
。
但是由于限制(见上文),在一个框中使用多个部分,那么在显示此特定的所有页面上仍然只会添加最后一个部分标题tcolorbox
。
\documentclass{memoir}
\usepackage{cmbright}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\makeatletter
\newcommand\mySectionHead[1]{%
\xdef\@thisheader{%
#1
}
}
\mySectionHead{}
%Header
\makepagestyle{myheader}
\makeevenhead{myheader}{}{\textbf{\@thisheader}}{}
\makeoddhead{myheader}{}{\textbf{\@thisheader}}{}
\makeheadrule{myheader}{\textwidth}{.5pt}
\pagestyle{myheader}
\makeatother
\newcommand\mysection[1]{%
\mySectionHead{#1}
\section{#1}
}
%Box
\usepackage{tcolorbox}
\tcbuselibrary{breakable, skins}
\newtcolorbox{testbox}[1][]{%
breakable,
enhanced,
#1
}
\newcommand*{\fakebreak}{\par\vspace{\textheight minus \textheight}\pagebreak}
\begin{document}
\section{This appears on the top}
Test
\vfill
\pagebreak
\tcolorbox
\section{This doesn't}
Test
\endtcolorbox
\pagebreak
\begin{testbox}[title=Testbox]
\mysection{This does}
\lipsum[1-10]
\fakebreak
\mysection{This does as well}
\lipsum[1]
\end{testbox}
\pagebreak
\tableofcontents
\end{document}
答案4
\documentclass{memoir}
\usepackage{titlesec}
\usepackage[framemethod=tikz]{mdframed}
% Define custom section title format
\titleformat{\section}[block]
{\normalfont\Large\bfseries}
{\thesection}
{1em}
{}
[\sectionmark{\thesection\quad#1}]
% Define custom box environment
\newenvironment{coloredbox}{%
\mdfsetup{
skipabove=1em,
skipbelow=1em,
leftmargin=0pt,
rightmargin=0pt,
linecolor=black,
backgroundcolor=gray!20,
linewidth=0.5pt,
innerleftmargin=10pt,
innerrightmargin=10pt,
innertopmargin=6pt,
innerbottommargin=6pt,
roundcorner=5pt,
singleextra={\sectionmark{\leftmark}}
}
\begin{mdframed}%
}{%
\end{mdframed}%
}
\pagestyle{myheader} % Use the previously defined page style
\begin{document}
\section{Section title}
Test
\newpage
\begin{coloredbox}
\section{Section title in colored box}
Test
\end{coloredbox}
\end{document}