LaTeX 之 framed 宏包

速览

framed – Framed or shaded regions that can break across pages

该宏包提供可三个环境:

  • frame:which puts an ordinary frame box around the region
  • shaded:which shades the region
  • leftbar:which places a line at the left side.

还提供了一个命令来自定义设置 framed-style 的环境

案例分析

1
2
3
4
5
6
7
8
9
10
11
12
\documentclass{ctexart}
\usepackage{zhlipsum}
\usepackage{geometry}
\usepackage{framed}
\geometry{a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}
\begin{document}
\begin{framed}
\zhlipsum[1-5]
\end{framed}
\clearpage
\fbox{\zhlipsum[1-3]}
\end{document}

代码分析

设置页边距,ctexart 文档类默认的页边距有些宽,习惯使用如下的页边距

1
2
\usepackage{geometry} 
\geometry{a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}

使用中文假文

1
2
\usepackage{zhlipsum} %中文假文宏包
\zhlipsum[1-5] %从假文文章中抽取第一段到第五段内容

frame 环境和 fbox 命令

两者均可以为文本内容添加外边框,但是当文本内容超过一行之后,使用 fbox 就会出现问题了,无法正确的换行和分页,导致超出该行的部分无法在 PDF 中显示。如下图所示
因此,针对此问题,宏包作者开发了 framed 宏包,两者的关系不言而喻,framed 宏包是基于 fbox 进行开发的。

framed 环境输出

  1. 正常换行

01-frame宏包正常换行.png

  1. 正常分页

02-frame宏包正常分页.png

fbox 命令输出

  1. 无法正确换行

03-fbox命令无法处理长文本-无法正常换行和分页.png

实际上,framebox 命令输出也是这种效果,这里暂且认为 framebox 命令和 fbox 命令完全相同

对应的,fbox 可以设置边框边线的宽度和内容距边框的间距,framed 环境同样是可以设置的

设置边框宽度和间距

对 fbox 盒子进行设置

1
2
3
4
\fbox{Test box}
\setlength{\fboxrule}{1.6pt}
\setlength{\fboxsep}{1em}
\fbox{Test box}

06-设置fbox边框和间距.png

对 frame 盒子进行设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass{ctexart}
\usepackage{zhlipsum}
\usepackage{geometry}
\usepackage{framed}
\geometry{a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}
\begin{document}

\begin{framed}
\zhlipsum[1]
\end{framed}
\setlength\FrameRule{1.6pt}
\setlength\FrameSep{2em}
\begin{framed}
\zhlipsum[1]
\end{framed}

\end{document}

07-默认frame盒子和自定义frame盒子.png

拓展应用

换页是否封闭外边框

  • framed 环境默认是封闭的
  • oframed 环境则提供了开口的外边框:oframed 其实是 “Open Framed” 的组合吧

04-oframed环境.png

左边线样式

我想许多人使用这个宏包就是为了实现网页中的 引用 效果吧 o (^▽^) o,左边线的长度会自动随着环境中的文本长度进行变化

1
2
3
4
5
6
7
8
9
10
\documentclass{ctexart}
\usepackage{zhlipsum}
\usepackage{geometry}
\usepackage{framed}
\geometry{a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}
\begin{document}
\begin{leftbar}
\zhlipsum[1]
\end{leftbar}
\end{document}

05-leftbar环境.png

其他参数

除了上面所说的 FrameSepFrameRule 命令,宏包手册中还列举了大量其他命令,这里就不仔细研究了,感觉用不到这里面太多的东西,但是还是感谢开发者啦 o (^▽^) o

08-framed宏包命令.png

参考资料