在单词周围画框

在单词周围画框

我想在段落中的某些单词周围放置一些小框。这些框不会包含超过一个单词。

\ovalbox文档中描述的命令与fancybox我的需求很接近。但是,我发现了一些问题:

  • 圆角与侧面没有完美对齐。
  • 段落左侧和右侧的文本被推开。
  • 段落中的行间距垂直增加。

我想创建具有以下功能的盒子:

  • 水平调整以适合内部文本的宽度。
  • 有圆角或斜角。
  • 可以用纯色填充。
  • 不会导致框内部或周围的任何文本移动。
  • 不会影响行的垂直间距。

答案1

您可以使用TikZ选项overlay和正确的锚点。看起来就像这样:

\documentclass{article}
\usepackage{tikz}
\newcommand\mybox[2][]{\tikz[overlay]\node[fill=blue!20,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm,#1] {#2};\phantom{#2}}
\begin{document}
   \noindent
   this is some text \mybox[fill=blue!20]{box} text\\
   this is some text box text
\end{document}

您可以指定额外的选项(就像我在这里为颜色所做的那样)。通过使用选项overlaytext锚点,我们可以确保正确放置并且不会影响间距。phantom添加以获得框内容的正常间距。这是示例代码的结果:

TikZ文本框

编辑:为了表明垂直间距也不受影响,请考虑以下内容:

\documentclass{article}
\usepackage{tikz}
\newcommand\mybox[2][]{\tikz[overlay]\node[fill=blue!20,inner sep=2pt, anchor=text, rectangle, rounded corners=1mm,#1] {#2};\phantom{#2}}
\begin{document}
  \begin{minipage}{0.4\textwidth}
    \noindent
    this is some text \mybox[fill=blue!20]{box} text\\
    this is some text box text
  \end{minipage}
  \begin{minipage}{0.4\textwidth}
    \noindent
    this is some text box text\\
    this is some text box text
  \end{minipage}    
\end{document}

其结果是:

TikZ文本框垂直间距

答案2

我的解决方案不需要特殊的宏。不需要 TikZ,不需要 PSTricks。只\pdfliteral使用原始宏。并且您可以定义\def\pdfliteral#1{\special{pdf:literal #1}}是否\pdfliteral不可用(例如在 XeTeX 中)。

\def\mybox#1{\leavevmode \setbox0=\hbox{#1}%
   \dimen0=\wd0 \edef\posxA{\expandafter\ignorept\the\dimen0 \space}%
   \hbox{\kern3pt\pdfliteral{q .8 .8 1 rg .8 .8 1 RG .9963 0 0 .9963 0 0 cm 1 j 1 J 6 w
                             0 0 m 0 5 l \posxA 5 l \posxA 0 l 0 0 l B Q}%
         \box0 \kern3pt}%
}
{\lccode`\?=`\p \lccode`\!=`\t  \lowercase{\gdef\ignorept#1?!{#1}}}

This is a \mybox{test} of my \mybox{box}.

\bye

圆盒

答案3

此类框可以通过extrude选项完成。以下是从文档tcolorbox中改编的小示例:tcolorbox

\documentclass{article}
\usepackage[most]{tcolorbox}

\newtcbox{\mybox}[1][]{enhanced, colframe=blue, colback=blue!15, 
       frame style={opacity=0.25}, interior style={opacity=0.25}, 
       nobeforeafter, tcbox raise base, shrink tight, extrude by=1mm, #1}

\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Ut \mybox[extrude bottom by=2cm]{purus} elit, vestibulum ut, \mybox{placerat} ac, 
\mybox[extrude top by=2mm]{adipiscing} vitae, \mybox[extrude left by=5mm, extrude 
bottom by=2mm]{felis}. Curabitur dictum gravida mauris. \mybox{Nam} arcu libero,    
nonummy eget, consectetuer id, vulputate a, magna.
\end{document}

在此处输入图片描述

答案4

基本上与 Roelof Spijker 给出的解决方案类似。我建议以不同的方式处理可选参数,并使用\strut以确保一致的框大小,同时不改变行距:

\documentclass{article}

\usepackage{tikz}

\newcommand\mmybox[2][fill=blue!20]{%
    \tikz[baseline]\node[%
        inner ysep=0pt, 
        inner xsep=2pt, 
        anchor=text, 
        rectangle, 
        rounded corners=1mm,
        #1] {\strut#2};%
}

\begin{document}
   \noindent
   this is some text \mmybox{Box} text\\
   this is some text box text
\end{document}

结果:

方框文字示例

相关内容