如何框住/遮蔽整个部分?

如何框住/遮蔽整个部分?

问题很简单,但对我来说似乎有点棘手。我不知道如何重新定义分段,让分配给一个\section{...}命令的所有内容(包括子部分等)被 / 框起来或遮蔽framedmdframed即使尝试了多次,并且搜索了几个小时,我还是不知道该如何处理,如果能得到帮助,我会非常高兴。

顺便说一句:我正在寻找一个不依赖于 titlesec 或类似软件包的解决方案……如果可能的话,只需进行干净的重新定义。=)

答案1

根据评论,您似乎希望能够将特定部分设置为框架或不框架,而不必找到该部分的末尾来插入其他命令。 一种方法是使用\FramedSection下面定义的而不是正常的\section

开始\FramedSection并将\begin{mdframed}设置WithinFramedSection为真,以便我们知道这个框架部分需要在后续\FramedSection或正常的时关闭\section

mdframed通过调用 来关闭此环境\EndFramedIfNeeded。以下情况需要执行此操作:

  • 随后\FramedSection
  • 随后\section
  • 并在文档末尾

笔记:

代码:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{mdframed}
\usepackage{lipsum}

\newtoggle{WithinFramedSection}%
\togglefalse{WithinFramedSection}%

\let\OldSection\section%
\def\section{\EndFramedIfNeeded\OldSection}%
\newcommand*{\EndFramedIfNeeded}{%
    \iftoggle{WithinFramedSection}{%
        \global\togglefalse{WithinFramedSection}%
        \end{mdframed}% End previous framed section
    }{}%
}%
\newcommand*{\FramedSection}[1]{%
    \EndFramedIfNeeded%
    \global\toggletrue{WithinFramedSection}%
    \begin{mdframed}\OldSection{#1}%
}%

% If the last \section is a \FramedSection, we need to end
% the mdframed environment.
\AtEndDocument{\EndFramedIfNeeded}%


\begin{document}
\FramedSection{Framed Section Name 1}
\subsection{Framed Sub section name 1}
\lipsum[1]
%
\section{Unframed Section}
\lipsum[2]
%
\FramedSection{Framed Section Name 2}
\subsection{Framed Sub section name 2}
\lipsum[3]
\end{document}

相关内容