我想在一些段落标题周围添加一个框架框。类似下图。如果可能的话,我希望框架框具有背景颜色(例如青色)、圆角和阴影。
+-----------------------+
| 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}
这种方法至少存在两个潜在缺陷:
对于在行末附近结束的段落名称,后续文本的第一个单词可能会位于同一行,延伸到边距。可以通过在
\\
参数结束后手动插入一个来补救\cparagraph
;算法通过将标题放在一个框中来确定标题的宽度。如果实际长度略大于
\textwidth
,算法将认为它延伸到两行,并相应地准备一个 2 行颜色框;但是,单词之间的空间可能会减少,以便标题适合一行。