我想知道是否有更通用的 minipage 版本。目前,我需要一个具有特定垂直对齐特性和背景颜色的 minipage。因此,我将一个 minibox 嵌套在调整框中的颜色框中。(参见下面的示例。)这并不好。它很麻烦,而且语法不统一。
当然,人们总是可以制作自己的宏或环境,但我想知道是否有人已经制作了一个提供这种多功能盒子的包,例如
\begin{omnibox}[width=0.3\textwidth, bgcolor=red, valign=c]
语法很重要:目前,如果不查看每个包的文档,我就无法做任何事情。我记不清 colorbox 是否有环境版本;colorbox 是否使用“bgcolor=red”语法;它是否允许更改前景色;adjustbox 的参数是使用圆括号还是方括号;等等。
[编辑:请不要过多关注下面的示例。对于特定示例,您不需要adjustbox,因为minipage有一些垂直对齐选项,但minipage的功能并不包括adjustbox的所有选项。另一方面,我认为minipage对于固定宽度的文本框是必要的。但我不能100%确定adjustbox是否没有这个功能。]
以下是示例:
\documentclass{article}
\usepackage[export]{adjustbox}
\usepackage{xcolor}
\usepackage{lipsum}
\begin{document}
\begin{adjustbox}{valign=c}
\colorbox{red}{%
\begin{minipage}{0.3\textwidth}
\lipsum[1]
\end{minipage}%
}
\end{adjustbox}
\begin{adjustbox}{valign=c}
\colorbox{gray}{%
\begin{minipage}{0.5\textwidth}
\lipsum[2]
\end{minipage}%
}
\end{adjustbox}
\end{document}
[编辑:我添加了一些 % 来消除虚假间距。]
答案1
你似乎不需要adjustbox
;这里有一个使用 的实现expl3
。
\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}
\usepackage{lipsum}
\ExplSyntaxOn
\NewDocumentEnvironment{omnibox}{m}
{
\keys_set:nn { ryo/omnibox } { #1 }
\__ryo_omnibox_start:
}
{
\__ryo_omnibox_end:
}
\keys_define:nn { ryo/omnibox }
{
width .dim_set:N = \l__ryo_omnibox_width_dim,
width .value_required:n = true,
bgcolor .tl_set:N = \l__ryo_omnibox_bgcolor_tl,
valign .tl_set:N = \l__ryo_omnibox_valign_tl,
valign .initial:n = c,
}
\box_new:N \l__ryo_omnibox_wrapper_box
\cs_new_protected:Nn \__ryo_omnibox_start:
{
\tl_if_empty:NF \l__ryo_omnibox_bgcolor_tl
{
\begin{lrbox}{\l__ryo_omnibox_wrapper_box}
}
\begin{minipage}[\l__ryo_omnibox_valign_tl]{\l__ryo_omnibox_width_dim}
}
\cs_new_protected:Nn \__ryo_omnibox_end:
{
\end{minipage}
\tl_if_empty:NF \l__ryo_omnibox_bgcolor_tl
{
\end{lrbox}
\colorbox{\l__ryo_omnibox_bgcolor_tl}{\usebox{\l__ryo_omnibox_wrapper_box}}
}
}
\ExplSyntaxOff
\begin{document}
\begin{omnibox}{width=4cm,bgcolor=green}
\lipsum[2]
\end{omnibox}\quad
\begin{omnibox}{width=4cm,valign=t}
\lipsum[2]
\end{omnibox}\quad
\begin{omnibox}{width=4cm,valign=b,bgcolor=red}
\lipsum[2]
\end{omnibox}
\end{document}
为了实现前景色,lrbox
在所有情况下都应使用。
\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}
\usepackage{lipsum}
\ExplSyntaxOn
\NewDocumentEnvironment{omnibox}{m}
{
\keys_set:nn { ryo/omnibox } { #1 }
\__ryo_omnibox_start:
}
{
\__ryo_omnibox_end:
}
\keys_define:nn { ryo/omnibox }
{
width .dim_set:N = \l__ryo_omnibox_width_dim,
width .value_required:n = true,
bgcolor .tl_set:N = \l__ryo_omnibox_bgcolor_tl,
fgcolor .tl_set:N = \l__ryo_omnibox_fgcolor_tl,
valign .tl_set:N = \l__ryo_omnibox_valign_tl,
valign .initial:n = c,
}
\box_new:N \l__ryo_omnibox_wrapper_box
\cs_new_protected:Nn \__ryo_omnibox_start:
{
\begin{lrbox}{\l__ryo_omnibox_wrapper_box}
\tl_if_empty:NF \l__ryo_omnibox_fgcolor_tl
{
\color{\l__ryo_omnibox_fgcolor_tl}
}
\begin{minipage}[\l__ryo_omnibox_valign_tl]{\l__ryo_omnibox_width_dim}
}
\cs_new_protected:Nn \__ryo_omnibox_end:
{
\end{minipage}
\end{lrbox}
\tl_if_empty:NTF \l__ryo_omnibox_bgcolor_tl
{
\usebox{\l__ryo_omnibox_wrapper_box}
}
{
\colorbox{\l__ryo_omnibox_bgcolor_tl}{\usebox{\l__ryo_omnibox_wrapper_box}}
}
}
\ExplSyntaxOff
\begin{document}
\begin{omnibox}{width=4cm,bgcolor=green,fgcolor=blue}
\lipsum[2]
\end{omnibox}\quad
\begin{omnibox}{width=4cm,valign=t}
\lipsum[2]
\end{omnibox}\quad
\begin{omnibox}{width=4cm,valign=b,bgcolor=red}
\lipsum[2]
\end{omnibox}
\end{document}