\section 在 tcolorbox 中不起作用

\section 在 tcolorbox 中不起作用

我是一名老师,我想创建一个文件,收集我在白板上所做的一切,以供参考。

为此,我想使用彩色盒子适用于课程的不同部分。我还希望页面顶部显示它属于哪个课程,以防我以后需要混合某些内容。

\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}

输出: 框外部分,第 1 页

盒内部分,第 2 页

目录,供参考

更新(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}

相关内容