多行部分标题周围的阴影框?

多行部分标题周围的阴影框?

我正在使用 LaTeX 编写包含许多问题的作业。我想通过将章节标题放在阴影框内来将问题与答案分开。我对 LaTeX 还比较陌生。

到目前为止,通过搜索和阅读相当多的例子,我已经设法拼凑出一些部分解决方案(这里尝试了最小的工作示例:)

\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{tikz}\usetikzlibrary{shapes.misc}
\newcommand\qnhead{%
\tikz[baseline,trim left=3.1cm, trim right=3cm] {
        \fill [black!12] (0.5cm,-1ex) rectangle (\textwidth+3.3cm,2.5ex);
        \node [
            anchor= base east,
            rectangle,
            minimum height=3.5ex] at (3cm,0ex) {
    \textnormal{\textbf{Question \thesection}}
};
}}
\titleformat{\section}{\itshape\large}{\qnhead}{0.1cm}{}
\renewcommand{\thesection}{\arabic{section}}

\begin{document}
\section{The text of the first question, which spans over more than %
         one line, will be placed here.}
\lipsum[2]
\section{The second question text will be placed here.}
\lipsum[2]
\end{document}

这种方法很好用,直到我遇到一个问题,问题最终跨越多行。我认为这是我使用 tikz 绘制矩形的方式的一个限制,但我不知道如何修改代码以使其跨越多行。

有人对我该如何解决这个问题有什么建议吗?

enter image description here

答案1

我建议采用一种不同的方法:使用mdframedamsthm包来定义一个类似定理的环境,这样你就不必改变 \section 的含义。类似以下内容:

\documentclass{article}
\usepackage{amsthm}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{lipsum}

\newlength\Questionwd
\setlength\Questionwd{2.8cm}
\newlength\Innerlsep
\setlength\Innerlsep{3pt}

% definition of the theorem style
\newtheoremstyle{mystyle}
  {\topsep}{\topsep}
  {\large\itshape%
    \parshape 2 0cm \linewidth \dimexpr\Questionwd-3pt\relax\dimexpr\linewidth-\Questionwd+3pt\relax%
  }
  {}{\bfseries}{}{0em}
  {\makebox[\dimexpr\Questionwd-\Innerlsep\relax][l]{%
    \thmname{#1}~\thmnumber{#2}\hfill}%
  }

% we use the previously defined style for the definition of the new theorem environment
% built with the mdframed package
\theoremstyle{mystyle}
\newmdtheoremenv[
  leftmargin=-\Questionwd,
  rightmargin=-8pt,
  innerleftmargin=\Innerlsep,
  linecolor=black!12,
  backgroundcolor=black!12,
  skipabove=0.65cm,
  skipbelow=0.20cm
]{question}{Question}

\begin{document}

\begin{question}
The text of the first question, which spans over more than one line, will be placed here.
\end{question}
\lipsum[2]
\begin{question}
The second question text will be placed here.
\end{question}
\lipsum[2]

\end{document}

enter image description here

相关内容