如何对几个段落进行框架处理,使得框架的宽度与周围文本的宽度完全相同,并且完全停留在一页上?

如何对几个段落进行框架处理,使得框架的宽度与周围文本的宽度完全相同,并且完全停留在一页上?

假设我们想将一到两段文字放入可见的框架中,如下所示:

  • 框架的总宽度(包括其边框)与周围文本的宽度完全相同(特别是,框架不应突出到右边距)

同时

  • 框架停留在一页上,即,框架不跨越多页。

以下是我迄今为止未成功的尝试:

\documentclass{article}
\usepackage{lipsum,framed}
\begin{document}
\vspace*{72ex}
\lipsum[1]
\begin{framed}%% NOT ON ONE PAGE!
  \begin{samepage}%
    \textbf{Some Title:}\par
    \lipsum[2]%
  \end{samepage}%
\end{framed}
\lipsum[3]
\par\medskip\noindent\fbox{\parbox{\textwidth}{%% GOES INTO THE RIGHT MARGIN; I dunno how to compute the width properly!
  \indent\textbf{Some Title:}\par\indent%% first-line indents don't work!
  \lipsum[4]
}}
\end{document}

产量

输出不佳

如您所见,上部框架跨越了分页符,而下部框架占据了比通常的文本更多的水平空间。(此外,不幸的是,首行缩进在下部框架中不起作用。不过,这还不算太糟;我可以解决这个问题。)

该怎么办?

编辑:基于约翰的建议,我尝试过这个:

\documentclass{article}
\usepackage{lipsum,framed}
\begin{document}
\vspace*{72ex}
\lipsum[1]
\par\addvspace{\topsep}\noindent
{\fboxsep=3\fboxsep
\fbox{\parbox{\dimexpr\textwidth-2\fboxsep-2\fboxrule}{%
  \textbf{Some Title:}\\
  \lipsum[2]
}}}\par\addvspace{\topsep}\indent
\lipsum[3]
\end{document}

它的工作如下:

好输出

但是,这串低级命令相当繁琐,而且容易出错。某些包中没有可以执行此操作的命令吗?

答案1

我会用包裹tcolorbox默认情况下,它或多或少可以实现你所期望的功能:

\documentclass{article}
\usepackage{lipsum}
\usepackage{tcolorbox}
\usepackage{showframe}% to visualize the text area
\begin{document}
\vspace*{72ex}
\lipsum[1]
\begin{tcolorbox}
  \subsubsection*{Some Title:}
  \lipsum[2]%
\end{tcolorbox}
\lipsum[3]
\end{document}

默认为灰色背景、圆角和粗线

或者如果你喜欢尖角、较细的框架线条和白色背景:

\documentclass{article}
\usepackage{lipsum}
\usepackage{tcolorbox}
%\usepackage{showframe}% to visualize the text area
\begin{document}
\vspace*{72ex}
\lipsum[1]
\begin{tcolorbox}[sharp corners=all,boxrule=\fboxrule,colback=white]
  \subsubsection*{Some Title:}
  \lipsum[2]%
\end{tcolorbox}
\lipsum[3]
\end{document}

尖角、细线、白色背景

如果您还希望所有框架都使用这些设置,或者还希望更改内边距或其他选项,请参阅手册以获取更多信息。

相关内容