方框内的文字

方框内的文字

我想用机器人正方形围绕一些文本的方框。我想表示一个大小为 1 的标记对象,在组合学中,这通常用类似 来表示\boxed{1}。如果方框是正方形就更好了。有适合此操作的命令吗?

答案1

这是基于我的collectbox包的解决方案。这使得它支持逐字文本和其他特殊文本。

它不会改变内容的基线,这正是您通常想要的。

\documentclass{article}

\usepackage{collectbox}

\makeatletter
\newcommand{\sqbox}{%
    \collectbox{%
        \@tempdima=\dimexpr\width-\totalheight\relax
        \ifdim\@tempdima<\z@
            \fbox{\hbox{\hspace{-.5\@tempdima}\BOXCONTENT\hspace{-.5\@tempdima}}}%
        \else
            \ht\collectedbox=\dimexpr\ht\collectedbox+.5\@tempdima\relax
            \dp\collectedbox=\dimexpr\dp\collectedbox+.5\@tempdima\relax
            \fbox{\BOXCONTENT}%
        \fi
    }%
}
\makeatother

\usepackage{graphicx}% just for the example text
\begin{document}

.. \sqbox{Text} .. \sqbox{Very very long Text} .. \sqbox{\scalebox{.1}[10]{Stretched}} .. \sqbox{$\sum\limits_{k=0}^{10} x_k = i$} .. \sqbox{\verb+$%^&+}


\end{document}

结果


或者,你可以不进行包装,而是直接将内容装箱:

\documentclass{article}


\makeatletter
\newcommand{\sqbox}[1]{%
    \@begin@tempboxa\hbox{#1}%
    \@tempdima=\dimexpr\width-\totalheight\relax
    \ifdim\@tempdima<\z@
        \fbox{\hbox{\hspace{-.5\@tempdima}\usebox\@tempboxa\hspace{-.5\@tempdima}}}%
    \else
        \ht\@tempboxa=\dimexpr\ht\@tempboxa+.5\@tempdima\relax
        \dp\@tempboxa=\dimexpr\dp\@tempboxa+.5\@tempdima\relax
        \fbox{\usebox\@tempboxa}%
    \fi
    \@end@tempboxa
}
\makeatother

\usepackage{graphicx}% For example only
\begin{document}

\noindent
.. \sqbox{Text} .. \sqbox{Very very long Text} .. \sqbox{\scalebox{.1}[10]{Stretched}} .. \sqbox{$\sum\limits_{k=0}^{10} x_k = i$} .. 

\end{document}

答案2

这是强制性的过度tikz版本。由于它利用了tikz固有的所有灵活性,tikz因此可以自定义正方形:

在此处输入图片描述

笔记:

  • 如果文本很长则不起作用,除非将其放置在 中\parbox

代码:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{shapes}

\makeatletter
\newdimen\@myBoxHeight%
\newdimen\@myBoxDepth%
\newdimen\@myBoxWidth%
\newdimen\@myBoxSize%
\newcommand{\SquareBox}[2][]{%
    \settoheight{\@myBoxHeight}{#2}% Record height of box
    \settodepth{\@myBoxDepth}{#2}% Record depth of box
    \settowidth{\@myBoxWidth}{#2}% Record width of box
    \pgfmathsetlength{\@myBoxSize}{max(\@myBoxWidth,(\@myBoxHeight+\@myBoxDepth))}%
    \tikz \node [shape=rectangle, shape aspect=1,draw=red,inner sep=2\pgflinewidth, minimum size=\@myBoxSize,#1] {#2};%
}%
\makeatother

\begin{document}
\SquareBox{I}
\SquareBox{y}
\SquareBox[thick, dashed]{long text}
\SquareBox[draw=blue]{longer text}
\SquareBox[draw=blue, thick, fill=yellow]{$e = mc^2$}
\SquareBox[draw=black, thick, fill=yellow!10, rounded corners=2pt]{$\displaystyle \int_{-\dfrac{\pi}{2}}^{\dfrac{\pi}{2}} dx $}
\end{document}

答案3

这应该对你有用。它会进行必要的垂直校正,以便文本位于基线上(与周围文本处于相同的垂直水平)。你可以更改线条\fboxsep以获得或多或少紧密的框。

编辑:我删除了该\smash命令,现在甚至连构造都无法$\left(\Sq{12345}^n\right)$工作了。

编辑2:添加\textSq文本模式内容并修改\Sq以接受数学模式。

\documentclass{article}

\usepackage{calc}

\makeatletter
\def\textSq#1{%
\begingroup% make boxes and lengths local
\setlength{\fboxsep}{0.3ex}% SET ANY DESIRED PADDING HERE
\setbox1=\hbox{#1}% save the contents
\setlength{\@tempdima}{\maxof{\wd1}{\ht1+\dp1}}% size of the box
\setlength{\@tempdimb}{(\@tempdima-\ht1+\dp1)/2}% vertical raise
\raise-\@tempdimb\hbox{\fbox{\vbox to \@tempdima{%
  \vfil\hbox to \@tempdima{\hfil\copy1\hfil}\vfil}}}%
\endgroup%
}
\def\Sq#1{\textSq{\ensuremath{#1}}}%
\makeatother

\begin{document}

Hello \textSq{1} world! $f(x):=\Sq1+\Sq2$.

\end{document}

在此处输入图片描述

答案4

这是一个使用pstricks伟大的解决方案Herbert Voss 几年前提出

\documentclass[12pt]{article}
\usepackage{pstricks}

\usepackage{auto-pst-pdf} % for easy pdf-output - otherwise comment this out

\def\bBox#1#2{\makebox[#1]{#2}}
\def\bhBox#1#2{\parbox[c][#1][c]{#1}{\makebox[#1]{#2}}}
\def\bhpBox#1#2{\parbox[c][#1][c]{#1}{\centering #2}}

\begin{document}
%\psset{framesep=0}
\psframebox{\bBox{1.3cm}{A}} und \psframebox{\bBox{1.3cm}{BBBBB}}

\psframebox{\bhBox{1.3cm}{A}} und \psframebox{\bhBox{1.3cm}{BBBBB}}

\psframebox{\bhpBox{1.3cm}{A}} und \psframebox{\bhpBox{1.3cm}{BBBBB}}

\end{document}

相关内容