我想在段落中的某些单词周围放置一些小框。这些框不会包含超过一个单词。
\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}
您可以指定额外的选项(就像我在这里为颜色所做的那样)。通过使用选项overlay
和text
锚点,我们可以确保正确放置并且不会影响间距。phantom
添加以获得框内容的正常间距。这是示例代码的结果:
编辑:为了表明垂直间距也不受影响,请考虑以下内容:
\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}
其结果是:
答案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}
结果: