我希望有一个根据其中的文本改变宽度的框。较短的句子应该有一个较窄的框,随着句子变长,框应该变大(直到它和文本一样宽,然后我想要一个换行符)。字体大小不应受到影响。到目前为止,我得到的最佳解决方案(见下文)是在文本较短时缩放文本。
\ovalbox{
\begin{minipage}[t]{0.85\columnwidth}
\resizebox{\textwidth}{!}{Some variable-length text}
\end{minipage}
}
答案1
您可以使用以下\fbox
命令在文本周围添加一个框架:
\fbox{text}
要将文本放入椭圆中,可以使用TikZ/PGF包及其shapes.geometric
库:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
% You can also make a \newcommand for this
\tikz[baseline=(e.base)] \node[ellipse,draw] (e) {text};
\end{document}
请注意,在这两种情况下,文本相对于段落而言都充当一个“大”框,并且将不会被分成几行。
如果您希望在框架中排版整个段落,并且如果段落适合一行则不会扩展为全行宽度,那么以下方法(受启发\@makecaption
)可能会实现:
\documentclass{article}
\usepackage{lipsum}
\makeatletter
\newcommand{\varbox}[1]{%
\setlength{\@tempdima}{\dimexpr\textwidth-2\fboxsep-0.8pt\relax}%
\sbox{\@tempboxa}{#1}%
\ifdim\wd\@tempboxa>\@tempdima
\fbox{\parbox{\@tempdima}{\strut #1}}%
\else
\fbox{\strut #1}%
\fi}
\makeatother
\begin{document}
\lipsum[1]
\noindent\varbox{\lipsum[2]}
\noindent\varbox{not too much text}
\end{document}
对于我来说,在椭圆内排版大块内容似乎不太实际。
答案2
您也可以看看varwidth
包裹。它允许定义一个{varwidth}
行为类似于{minipage}
但需要最大限度宽度作为参数。
\documentclass{article}
\usepackage{varwidth}
% just for this demo
\usepackage{parskip}
\begin{document}
\fbox{%
\begin{varwidth}{0.8\textwidth}%
Text
\end{varwidth}%
}
Text that deomenstrates the \verb|\textwidth|, an for that is
longer than one line or maybe two.
\fbox{%
\begin{varwidth}{0.8\textwidth}%
Very long text, that breaks a line.
Very long text, that breaks a line.
Very long text, that breaks a line.
\end{varwidth}%
}
\end{document}
答案3
您还应该考虑包裹mdframed
。如果您有大段文字,这实际上可以跨分页符工作,并且在线条样式、填充颜色等方面具有很大的灵活性......
\documentclass{article}
\usepackage[framemethod=TikZ]{mdframed}
\begin{document}
\begin{mdframed}[roundcorner=15pt, linecolor=red, outerlinewidth=2pt,backgroundcolor=yellow!30]
\begin{minipage}[t]{0.85\columnwidth}
\resizebox{\textwidth}{!}{Some variable-length text}
\end{minipage}
\end{mdframed}
\end{document}