我正在编写一个 LaTeX 文档,我想在其中放置两个并排的框,其中包含不同长度的内容。
我希望每个框的高度相同,并且该高度需要足以容纳内容最多的框中的内容,即两个框的高度应为两个框中较高者的高度。最后,我想在其中一个框的中间位置添加边框。之所以要使用“每个框的高度相同”,是因为我希望有边框的框周围的边框看起来包含另一个无边框框中的文本。
在 Word / Pages / 等文字处理器中,我会通过制作 1 行 2 列的表格来实现这一点;我可以通过任意设置其中一个单元格的边框来应用框边框。如果您在一个单元格中放入大量内容,则该行中的另一个单元格会随之增大以匹配它。
我尝试过在 LaTeX 中完成此操作,但只完成了一半。我可以获得两个框和两个小页面。我可以使用 来勾勒框的轮廓\newmdenv
。我似乎无法做到的是,让两个框的大小相同,但内容的长度不同。如果我将“大”内容放在带边框的框中。但如果我将“小”内容放在该框中,那么它就不够大,顶部和底部看起来无法“包含”另一个框。
\documentclass[11pt]{article}
\usepackage{geometry}
\usepackage{mdframed}
\geometry{letterpaper}
\usepackage{lipsum} %used to generate dummy text
\newmdenv[leftline=false]{leftcap}
\title{latextest2.tex}
\author{test}
\begin{document}
\begin{figure}[!h]
\begin{minipage}[t]{0.5\linewidth}
\vspace{12pt}
\lipsum[1]
\end{minipage}
\hspace{0.5cm}
\begin{minipage}[t]{0.5\linewidth}
\vspace{0pt}
\begin{leftcap}
\lipsum[2]
\end{leftcap}
\end{minipage}
\end{figure}
\end{document}
在上面的代码中,lipsum[1]
段落比段落长lipsum[2]
,因此框变大了。我怎样才能使这两个小页面框大小相同?或者,我可以使用什么其他方法来获得 Word 的 2 列 1 行表格的行为?
更新
感谢 Werner 和 Martin 的回答。我通过一些家庭作业让 Werner 的命令正常工作。我无法完全让 Martin 的命令正常工作。
下面,我添加了 Martin链接到的命令,使用该命令,我可以让框以我想要的方式cfbox
移动,minipage
对于此特定内容。唯一的问题是,通过minipage
明确设置高度,它不再灵活。我的意思是,右边的框始终与左边的框高度相同。但我想要的是两个框的高度都与两个框中最高的一个一样高。因此,例如,如果我将内容添加到右侧框,我希望该框能够增大。我认为这里需要的是相当于if/then/else
框高度的语句。下面是一个例子,显示它在放置框方面可以正常工作,但在不扩展以适应新大小的内容方面却出现了问题。
\documentclass[11pt]{article}
\usepackage{geometry}
\geometry{letterpaper}
\usepackage{lipsum} %used to generate dummy text
\usepackage{xcolor}
\makeatletter % Copied this from: http://tex.stackexchange.com/a/55534
\newcommand\cfbox[3][lbrt]{% Copied this from: http://tex.stackexchange.com/a/55534
\begingroup
\leavevmode
\setbox\@tempboxa\hbox{%
\color@begingroup
\kern\fboxsep{#3}\kern\fboxsep
\color@endgroup
}%
\@tempdima\fboxrule
\advance\@tempdima\fboxsep
\advance\@tempdima\dp\@tempboxa
\hbox{%
\hskip-.5\fboxrule
\lower\@tempdima\hbox{%
\vbox{%
\in@{t}{#1}%
\ifin@
{\color{#2}%
\hrule\@height\fboxrule
}%
\fi
\hbox{%
\in@{l}{#1}%
\ifin@
{\color{#2}%
\vrule\@width\fboxrule
}%
\fi
\vbox{%
\vskip\fboxsep
\box\@tempboxa
\vskip\fboxsep}%
\in@{r}{#1}%
\ifin@
{\color{#2}%
\vrule\@width\fboxrule
}%
\fi
}%
\in@{b}{#1}%
\ifin@
{\color{#2}%
\hrule\@height\fboxrule
}%
\fi
}%
}%
\hskip-.5\fboxrule
}%
\endgroup
}
\title{latextest2.tex}
\author{test}
\usepackage{calc}
\newsavebox\mybox
\begin{document}
\begin{lrbox}{\mybox}
\begin{minipage}[t]{0.5\linewidth}
\lipsum[1]
\end{minipage}%
\end{lrbox}%
\usebox\mybox
\hspace{0.5cm}
\cfbox[tbr]{black}{% As suggested by Martin Scharrer at http://tex.stackexchange.com/a/56883
\begin{minipage}[t][\ht\mybox+\dp\mybox]{0.5\linewidth}
\lipsum[2]\par\lipsum[3]
\end{minipage}
}
\end{document}
答案1
您可以坚持使用“MS Word 的 2 列 1 行表格”方法:
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}% http://ctan.org/pkg/geometry
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\begin{document}
\begin{figure}[t]
\begin{tabular}{|p{\dimexpr.5\linewidth-2\tabcolsep}|p{\dimexpr.5\linewidth-2\tabcolsep}}
\cline{1-1}
\lipsum[1] & \lipsum[2] \\ \cline{1-1}
\end{tabular}
\end{figure}
\begin{figure}[t]
\begin{tabular}{p{\dimexpr.5\linewidth-2\tabcolsep}|p{\dimexpr.5\linewidth-2\tabcolsep}|}
\cline{2-2}
\lipsum[1] & \lipsum[2] \\ \cline{2-2}
\end{tabular}
\end{figure}
\end{document}
上述 MWE 中的两个figure
s 分别包含一个带框的左块和右块。由于两个单元格(无论内容如何)都设置在 1 x 2 表格内,因此尺寸将按照与您的要求相同的规则扩展。
tabular
由仅 2 个p
宽度为 的字符列构成.5\linewidth-2\tabcolsep
,这使得它能够精确地容纳在文本块内。\cline
在指定的列上绘制一条水平线。
答案2
minipage
您可以使用其设置高度第二个可选参数。您需要将第一个存储minipage
到保存箱中以获取其高度。
没有左线的内容周围的边框有点困难。不过你可以使用我为CSS border-top、border-bottom、border-right LaTeX 等效项为此。例如,将 替换\fbox
为\cfbox[brt]
或将fbox
键替换为precode=\cfbox[brt]
。mdframed
环境不适合已经minipage
-d 的内容。
\documentclass[11pt]{article}
\usepackage{geometry}
\geometry{letterpaper}
\usepackage{lipsum} %used to generate dummy text
%\usepackage{mdframed}
%\newmdenv[leftline=false]{leftcap}
\title{latextest2.tex}
\author{test}
\usepackage{calc}
\newsavebox\mybox
\begin{document}
\begin{figure}[!h]% ? figure is only required if you need a \caption or actually want it to float
\begin{lrbox}{\mybox}
\begin{minipage}[t]{0.5\linewidth}
\lipsum[1]
\end{minipage}%
\end{lrbox}%
\usebox\mybox
\hspace{0.5cm}
\begin{minipage}[t][\ht\mybox+\dp\mybox]{0.5\linewidth}
\begin{leftcap}
\lipsum[2]
\end{leftcap}
\end{minipage}
\end{figure}
\end{document}
请注意,可以使用最新版本来简化此操作adjustbox
:
\documentclass[11pt]{article}
\usepackage{geometry}
\usepackage{mdframed}
\geometry{letterpaper}
\usepackage{lipsum} %used to generate dummy text
\usepackage{adjustbox}[2012/05/16]
\newmdenv[leftline=false]{leftcap}
\title{latextest2.tex}
\author{test}
\newlength\myheight
\begin{document}
\begin{figure}[!h]% ? figure is only required if you need a \caption or actually want it to float
\begin{adjustbox}{minipage=[t]{0.5\linewidth},gstore totalheight=\myheight,margin=\fboxsep+\fboxrule}% margin has same size as a \fbox
\lipsum[1]
\end{adjustbox}
\hspace{0.5cm}
\begin{adjustbox}{minipage=[t][\myheight]{0.5\linewidth},fbox}
\lipsum[2]
\end{adjustbox}
\end{figure}
\end{document}