长度自适应的盒子

长度自适应的盒子

当我想将公式放入框中时,我希望框能够适应公式的长度。例如,我不想放入$1+1=2$一个非常大的框。为了解决这个问题,我使用命令\encadrer(它需要calc包和ifthen包),该命令包含在以下最小示例的序言中:

\documentclass[10pt,a4paper]{article}
\usepackage{ifthen}
\usepackage{calc}

%\encadrer:
\newlength\lenbox
\newcommand{\encadrer}[1]{

\linethickness{2pt}
\setlength\lenbox{\widthof{#1}}
\begin{center}
\fbox{
\begin{minipage}{\lenbox}
#1
\end{minipage}
}
\end{center} 
}


\begin{document}

\encadrer{$1+1+1=3$}

\end{document}

但此命令不适用于多行。例如,如果我输入

\encadrer{$1+1+1=3$ \\ and \\ $1+1=2$}

在上例中,框变大了。在此示例中,我希望框的长度为 max( \widthof{$1+1+1=3$}, \widthof{$1+1=2$})。我想到了一些东西:如果的参数的\encadrer形式为:string1 \\ string2 \\ ... \\ stringN,我可以使用xstring包提取之间的所有字符串,\\并使用循环来定义类似的东西:(伪代码)

set lenbox to 0
for i from 1 to N
  set lenbox to max(lenbox,\widthof{stringi})
end for

但感觉很复杂,我想知道是否还有其他解决方案。如果我走在正确的轨道上,有人能帮我把这个伪代码转换成 LaTeX 代码吗?谢谢你的帮助!

答案1

varwidth包裹同名的varwidth环境默认提供此功能,如果宽度小于指定的宽度,则设置一个“自然宽度”的框:

在此处输入图片描述

\documentclass[10pt,a4paper]{article}
\usepackage{varwidth}% http://ctan.org/pkg/varwidth

%\encadrer:
\newcommand{\encadrer}[1]{{%
  \centering
  \fbox{%
    \begin{varwidth}{\dimexpr\linewidth-2\fboxsep-2\fboxrule}
      \centering #1%
    \end{varwidth}%
  }
  \par}%
}


\begin{document}

\encadrer{$1+1+1=3$}

\encadrer{$1+1+1=3$ \\ and \\ $1+1=2$}

\end{document}

答案2

您可以避免所有测量:

\documentclass[10pt,a4paper]{article}
\usepackage{varwidth}

%\encadrer:
\newcommand{\encadrer}[1]{%
  \begin{center}
  \setlength{\fboxrule}{2pt}
  \fbox{%
    \begin{varwidth}{\textwidth}
    #1
    \end{varwidth}%
  }
  \end{center}
}


\begin{document}

\encadrer{$1+1+1=3$}

\encadrer{$1+1+1=3$ \\ and \\ $1+1=2$}

\end{document}

请注意,框架厚度的参数是\fboxsep;在center环境中设置它可以确保它将恢复到以前的值。但是,正如您在图片中看到的那样,2pt 确实太多了。

还请注意,我保护了一些行尾以避免出现虚假空格。没有必要使用%after\begin{varwidth}{\textwidth}和 after,#1因为在这些位置空格将被忽略,但\fbox通常不会出现。

在此处输入图片描述

答案3

除了多行条目的问题之外,您的命令还因行尾\encadrer缺失而包含大量额外的空白。%

我想你想要

\newcommand{\encadrer}[1]{\fbox{$\begin{array}{@{}c@{}}#1\end{array}$}}

相关内容