如何为框创建命令,使框内的文本可以自动调整?

如何为框创建命令,使框内的文本可以自动调整?

我对如何正确执行命令有疑问。我创建了一个框,使用时文本将位于其中,但当我延长文本时出现了问题,结果如下:

代码:

\newcommand{\casebox}[1]{%
\framebox[.5\textwidth][t]{#1}
}

在此处输入图片描述

我希望我能按照我的命令做出这样的事情:

在此处输入图片描述

答案1

一种可能的解决方案是使用varwidth包裹:

\documentclass{article}
\usepackage{varwidth}
\usepackage{lipsum}% just to generate text for the example

\newcommand\mybox[2][\dimexpr\textwidth-2\fboxsep\relax]{%
\fbox{\begin{varwidth}{#1}
#2
\end{varwidth}}}

\begin{document}

\noindent\mybox{test}

\noindent\mybox{some longer text}

\noindent\mybox{text here text here text here text here text here}

\noindent\mybox{\lipsum[2]}

\end{document}

在此处输入图片描述

如果我的命令总是意味着开始和结束它自己的段落,那么定义可以更改为类似

\newcommand\mybox[2][\dimexpr\textwidth-2\fboxsep\relax]{%
\par\noindent\fbox{\begin{varwidth}{#1}
#2
\end{varwidth}}\par}

然后我们可以简单地说

\mybox{text text text text text}

答案2

如果你对普通的盒子感到满意,那么这可能不是你的解决方案。为了说明基本情况的有效性,请执行以下操作:

在此处输入图片描述

当然,作为tikz解决方案,您可以为框设置样式。以下只是可用的众多选项中的一小部分:

在此处输入图片描述

此外,通过添加选项text width=\linewidth,您可以选择让框占据整个\linewidth

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}
\usepackage{lipsum}

\newlength{\LengthOfText}
\newlength{\LengthOfTextExceedingLineWidth}
\newlength{\TextWidth}
\newcommand{\Boxed}[2][]{%
    % #1 = box draw/fill options
    % #2 = text
    \settowidth{\LengthOfText}{\mbox{#2}}%
    \pgfmathsetlength{\LengthOfTextExceedingLineWidth}
        {\LengthOfText-\linewidth}
    \pgfmathsetlength{\TextWidth}{\LengthOfTextExceedingLineWidth > 0pt ? \linewidth : \LengthOfText}%
    \begin{tikzpicture}[baseline, inner sep=2pt, outer sep=0]
            \node [, text width=\TextWidth, #1] (Origin) {#2};
            \draw [thick, draw=black, #1] 
                (Origin.south west) rectangle (Origin.north east) ;
    \end{tikzpicture}%
}


\begin{document}
\noindent\Boxed{test}\par\medskip\noindent
\noindent\Boxed{some longer text}\par\medskip\noindent
\noindent\Boxed{text here text here text here text here text here}\par\medskip\noindent
\noindent\Boxed{\lipsum[2]}

\bigskip\noindent
\Boxed[red]{test}\par\medskip\noindent
\Boxed[dashed]{text here text here text here text here text here}\par\medskip\noindent
\Boxed[fill=yellow!20, fill opacity=0.3, text opacity=1]{\lipsum[2]}

\bigskip\noindent
\Boxed[blue, text width=\linewidth]{test}\par\medskip\noindent
\Boxed[draw=brown, text width=\linewidth]{text here text here text here text here text here}\par\medskip\noindent
\end{document}

相关内容