以下代码来自这个帖子问题是我想要一种方法来自动化调整盒子的大小,使其非常小并且留有少量间距,但是下面的解决方案不适用于分数。
\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不是解决此问题的正确工具。您已经找到了其他也可以使用彩色框架的解决方案。