具有最小间距的 \boxed 替代品?

具有最小间距的 \boxed 替代品?

以下代码来自这个帖子问题是我想要一种方法来自动化调整盒子的大小,使其非常小并且留有少量间距,但是下面的解决方案不适用于分数。

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shapes}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[1][red]{%
    \tikz[overlay,remember picture]{
    \draw[#1]
      ($(bl)+(-0.2em,0.9em)$) rectangle
      ($(br)+(0.2em,-0.3em)$);}
}
\newcommand{\MyBox}[2][red]{\tikzmark{bl}#2\tikzmark{br}\DrawBox[#1]}

\begin{document}
    Lorem ipsum dolor sit amet. \MyBox{Lorem ipsum} dolor sit amet. Lorem ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. \MyBox{$\frac{\frac{2}{5} - 7}{4 + x^3}$} Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    ipsum \MyBox[blue]{$3.29 \times 10^{29}$} dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    \MyBox[draw=red,fill=yellow!20,,opacity=0.3]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
\end{document}

答案1

\tcbox另一种选择是tcolorbox

\newtcbox{\MyBox}{}[1][]{on line, size=tight, sharp corners, colback=white, #1}

声明一个框,其内容周围有最小的空间,与周围的文本对齐,背景颜色为白色。所有这些默认设置都可以使用可选参数更改。为了说明这一点,与 Gonzalo 的参数等价的是

  • frame color->colframe
  • fill color->colback
  • \fboxsep->boxsep
  • box depth->bottom
  • box height->top

完整的例子(取自 Gonzalo 的回答)

\documentclass{article}

\usepackage{tcolorbox}

\newtcbox{\MyBox}[1][]{on line, size=tight, sharp corners, colback=white, #1}

\begin{document}
    Lorem ipsum dolor sit amet. \MyBox{Lorem ipsum} dolor sit amet. Lorem ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. \MyBox[colframe=red]{$\frac{\frac{2}{5} - 7}{4 + x^3}$} Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. 
    Lorem 
    ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    \MyBox[colframe=red, colback=yellow!10]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[colframe=red!40, colback=olive, boxsep=8pt]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[colframe=olive,colback=red!40, boxsep=4pt, bottom=4pt, top=33pt]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[colframe=olive, colback=red!40, boxsep=4pt, bottom=23pt, top=2pt]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
\end{document}

在此处输入图片描述

答案2

在该包的帮助下,我xparse使用定义了一个命令,该命令有 5 个可选参数和一个强制参数;语法是\fboxcolor\MyBox

\MyBox[<frame color>][<fill color>]{<contents>}[\fboxsep value][<box depth>][<box height>]

该命令非常灵活;您可以更改颜色(框架和填充)和\fboxsep使用的值;并为您提供对框高度和深度的额外独立控制(此命令受到 Herbert 对您所链接的问题的回答的启发)。

代码和示例(在某些情况下我使用了一些夸张的值只是为了展示命令的灵活性):

\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}

\newbox\FBox
\NewDocumentCommand\MyBox{O{black}O{white}mO{0.5pt}O{0pt}O{0pt}}{%
    \setlength\fboxsep{#4}\sbox\FBox{\fcolorbox{#1}{#2}{#3\rule[-#5]{0pt}{#6}}}\usebox\FBox}

\begin{document}
    Lorem ipsum dolor sit amet. \MyBox{Lorem ipsum} dolor sit amet. Lorem ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. \MyBox[red]{$\frac{\frac{2}{5} - 7}{4 + x^3}$} Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    \MyBox[red!30][yellow!10]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[olive][red!40]{$3.29 \times 10^{29}$}[8pt] ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[olive][red!40]{$3.29 \times 10^{29}$}[4pt][2pt][33pt] ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    \MyBox[olive][red!40]{$3.29 \times 10^{29}$}[4pt][23pt][2pt] ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
\end{document}

在此处输入图片描述

答案3

以下是之前提供的解决方案的增强版本之前有一个关于盒装替代品且间距更好的问题。此版本测量框所包围的文本的高度和深度。这两个参数\@DrawBoxHeightSep指定要应用于高度和深度的分离。以下是放大的相关部分:

在此处输入图片描述

笔记:

  • 这确实需要两次运行:第一次计算框的位置,第二次将其绘制在正确的位置。

已知的问题:

  • 如果文本跨越行边界,则此方法无效。如果这是个问题,并且您愿意考虑使用突出显示而不是框,则应参考LaTeX 中的酷炫文本突出显示

代码:

\documentclass[border=1pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shapes}

\makeatletter
\newcommand*{\@DrawBoxHeightSep}{0.030em}%
\newcommand*{\@DrawBoxDepthSep}{0.025em}%
\newcommand{\@DrawBox}[3][red]{%#1= style, #2=height, #3=depth
    \tikz[overlay,remember picture]{
    \draw[#1]
      ($(bl)+(-0.2em,#2+\@DrawBoxHeightSep)$) rectangle
      ($(br)+(0.2em,-#3-+\@DrawBoxDepthSep)$);}
}

\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}

\newdimen\@myBoxHeight%
\newdimen\@myBoxDepth%
\newcommand{\MyBox}[2][red]{%
    \settoheight{\@myBoxHeight}{#2}% Record height of box
    \settodepth{\@myBoxDepth}{#2}% Record height of box
    \tikzmark{bl}#2\tikzmark{br}\@DrawBox[#1]{\@myBoxHeight}{\@myBoxDepth}% Draw the box
}
\makeatother

\begin{document}
    Lorem ipsum dolor sit amet. \MyBox{Lorem ipsum} dolor sit amet. Lorem ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. \MyBox{$\frac{\frac{2}{5} - 7}{4 + x^3}$} Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.  Lorem 
    ipsum \MyBox[blue]{$3.29 \times 10^{29}$} dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem 
    \MyBox[draw=red,fill=yellow!20,,opacity=0.3]{$3.29 \times 10^{29}$} ipsum dolor sit amet. 
    Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.
\end{document}

答案4

\newcommand\MyBox[2][red]{\mbox{\tikzmark{bl}#2\tikzmark{br}\DrawBox[#1]}}

但垂直间距仍然不正确。然而,tikz不是解决此问题的正确工具。您已经找到了其他也可以使用彩色框架的解决方案。

相关内容