我想创建一个框/框架(在数学模式中),其内容水平和垂直居中,以便我可以调整框的高度,并且框的宽度自动(!)是上下文的宽度。
以下 MWE 几乎满足了我的要求:
\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
$\fbox{\parbox[c][4pt][c]{\textwidth}{a first try}}$
$\framebox[\width]{\parbox[c][2pt][c]{\textwidth}{another one}}$
\end{document}
问题如下:
这两个框的长度都不如其内容的长度,即“第一次尝试”和“另一个尝试”的长度,因此
\textwidth
似乎效果不佳。当然,我可以手动尝试将宽度调整到正确的大小,但我将经常创建框,因此每次都调整宽度以使其正确是不可行的。垂直居中效果不太好,因为两个框中的文本都移到了顶部
我愿意接受不同的方法,只要它们能满足我的要求,比如定义新的命令(例如使用 tikz),它们可以满足我的要求,只要我不需要输入太多内容就可以使用它们,因为正如我所说,我需要创建很多框。
顺便说一句,使用框命令几乎可以实现这一点是大量的打字 - 如果只有一个命令就足够了,我会很高兴。
编辑
框的高度通常像这样:而我希望它像这样:,即框应该刚好垂直覆盖其内容。在某个点之后,减少 \fbox 中的高度参数不会产生任何效果(第一个框的高度为 8pt,减少它不会产生任何效果;为了获得第二张图片,我在某些编辑程序中编辑了第一张图片)
答案1
你们两个方向的线路都已满员。
水平线包含
- 1 段缩进
- 1 厚度规则
\fboxrule
- 填充空间
\fboxsep
- 1箱宽度
\textwidth
- 填充空间
\fboxsep
- 1 厚度规则
\fboxrule
这不仅仅是\textwidth
:-) 我在下面进行了调整。我留在了$
虽然他们什么都不做,但框的内容总是以文本模式启动。
垂直方向上,一行 10pt 的文本被强制放入垂直尺寸为 4pt 的框中。
要使用您根本不想要的自然宽度\parbox
,只需使用\fbox
:
\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
\noindent$\fbox{\parbox[c][15pt][c]{\dimexpr\textwidth-2\fboxsep-2\fboxrule}%
{a first try}}$
\noindent$\fbox{\rule[-20pt]{0pt}{40pt}a first try}$
\end{document}
答案2
你可以尝试这个varwidth
包,像这样:
\documentclass[12pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{varwidth}
\begin{document}
$\framebox{\begin{varwidth}{1in}a first try\end{varwidth}}$
$\framebox{\begin{varwidth}{1in}another one\end{varwidth}}$
\end{document}
结果: