如何制作段落标题周围的框架框

如何制作段落标题周围的框架框

我想在一些段落标题周围添加一个框架框。类似下图。如果可能的话,我希望框架框具有背景颜色(例如青色)、圆角和阴影。

+-----------------------+
|   Paragraph one       | Paragraph text starts here. 
+-----------------------+

我一直在互联网上搜索,但只找到了包装整个段落或占据一行的章节标题的解决方案。

答案1

不带任何花哨的色彩。

\documentclass{article}
\usepackage{titlesec}
\newcommand{\mypara}[1]{\hspace*{-\fboxsep}\fbox{\theparagraph\hskip1em #1}}
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}{}{0em}{\mypara}

\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{0.5em}
\setcounter{secnumdepth}{5}

\begin{document}
\section{some section}
\subsection{some subsection}
\subsubsection{some subsubsection}
\paragraph{A test paragraph}
Some test text.


\end{document}

在此处输入图片描述

拥有色彩和力量tikz

\documentclass{article}
\usepackage{lipsum}
\usepackage{titlesec}
\usepackage{tikz}
\newcommand{\mypara}[1]{%
\begin{tikzpicture}[baseline=(a.base)]
 \node[draw=red,line width=0.5pt,rounded corners=1ex,inner sep=2pt,fill=cyan] (a) {#1};
\end{tikzpicture}
}

\titlespacing*{\paragraph}{0pt}{3.25ex plus 1ex minus .2ex}{0.5em}

\newcommand\bparagraph[1]{%
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}{}{0em}{\mypara}
\paragraph{#1}
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
}

\begin{document}
\section{some section}
\subsection{some subsection}
\subsubsection{some subsubsection}
\bparagraph{A test paragraph}
\lipsum[1]
\paragraph{A test paragraph}
\lipsum[1]


\end{document}

在此处输入图片描述

答案2

使用tcolorbox并为常规段落和框架段落定义两个命令,可以根据需要多次使用:

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{titlesec}
\usepackage{lipsum}
\usepackage[many]{tcolorbox}

\newcommand\framedparagraph[1]{%
  \tcbox[
    enhanced,
    colframe=cyan,
    box align=base,
    nobeforeafter,
    top=1pt,
    bottom=1pt,
    left=2pt,
    right=2pt,
    enlarge left by=-1.2mm,
    boxsep=0pt,
    interior style={top color=orange!20,bottom color=magenta!20}
  ]{\theparagraph\hskip1em#1}%
}

\newcommand\FramedPara{%
\titleformat{\paragraph}[runin]
  {\normalfont\normalsize\bfseries}{}{0em}{\framedparagraph}
}

\newcommand\RegularPara{%
\titleformat{\paragraph}[runin]
  {\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
}

\setcounter{secnumdepth}{5}

\begin{document}
\section{some section}
\subsection{some subsection}
\subsubsection{some subsubsection}
\FramedPara
\paragraph{A test paragraph} 
\lipsum[2]
\RegularPara
\paragraph{A test paragraph}
\lipsum[4]

\end{document}

由于段落标题采用“连续”样式,因此框的高度和深度被保持在最小,以免破坏行之间的规则分隔。

答案3

这是固定宽度的简洁版本:\cparagraph[optional-fixed-width]{name}。已编辑,允许框随段落名称的大小而增大(但必须保持小于一行的宽度)。已重新编辑以处理\parskip

已编辑,可自动处理长度达两行的段落名称。

下面的 MWE 显示了两个标题宽度可变的段落,然后是两个固定宽度的段落;最后一个延伸到第二行的段落。

\documentclass{article}
\usepackage{xcolor,tabto,lipsum}
\newlength\hbuffer
\setlength\hbuffer{6pt}
\newcommand\cparagraph[2][0pt]{%
  \setbox2=\hbox{\bfseries#2\kern\hbuffer}%
  \ifdim\wd2>\textwidth\relax%
    \wd2=\dimexpr\textwidth+\hbuffer\relax\relax%
    \def\mystrut{%
      \rule[\dimexpr-\ht\strutbox-\baselineskip\relax]{0pt}{2\baselineskip}}%
  \else%
    \let\mystrut\strut%
    \ifdim#1>0pt\relax\wd2=#1\relax\fi%
  \fi%
  \setbox4=\hbox{\mystrut}%
  \fboxsep=.5pt\noindent\rule{-.5\hbuffer}{0pt}\colorbox{red}{\colorbox{cyan!15}{%
% THE 2" BOX WIDTH AND THE THE 3.25ex \vspace MAY NEED TWEAKING
  \makebox[\wd2][l]{\mystrut}}}%
  \vspace{\dimexpr-\ht4-\dp4-3.25ex+\fboxsep-\parskip\relax}%
  \paragraph{#2}\tabto*{\dimexpr\wd2-.5\hbuffer+.66ex\relax}\allowbreak}
%\parskip 1ex
\begin{document}
\cparagraph{Paragraph one}
\lipsum[4] 
\cparagraph{My other paragraph}
\lipsum[4]
\cparagraph[2in]{Paragraph one}
\lipsum[4] 
\cparagraph[2in]{My other paragraph}
\lipsum[4]
\cparagraph{My other paragraph with a very very long name 
that extends well past one line}
\lipsum[4]
\end{document}

在此处输入图片描述

这种方法至少存在两个潜在缺陷:

  1. 对于在行末附近结束的段落名称,后续文本的第一个单词可能会位于同一行,延伸到边距。可以通过在\\参数结束后手动插入一个来补救\cparagraph

  2. 算法通过将标题放在一个框中来确定标题的宽度。如果实际长度略大于\textwidth,算法将认为它延伸到两行,并相应地准备一个 2 行颜色框;但是,单词之间的空间可能会减少,以便标题适合一行。

相关内容