答案1
\strut
在每个 中添加一个\hl
。
\documentclass[12pt]{article}
\usepackage{tikz}
\newcommand*\hl[1]{\tikz[overlay]\node[draw, fill={rgb:black,1;red,5},
inner sep=1mm, anchor=text, rectangle, rounded corners=1mm,
minimum height=8mm] {#1\strut};\phantom{#1}}
\begin{document}
\Huge \hl{Word} \hl{one}, \hl{another} \hl{long} \hl{phrase}.
\end{document}
您可以通过降低值来稍微收紧它inner sep
,或者使用自定义支柱,例如
\def\mystrut{\rule[-.5\dp\strutbox]{0pt}{.75\dimexpr\ht\strutbox+\dp\strutbox}}
然后\mystrut
在\hl
定义中使用。
答案2
tcolorbox
只需用代替即可获得另一种解决方案TikZ
。
on line
选项将所有框与其基线对齐,并且不会在它们之间创建新的段落。
before upper=\strut
确保所有箱子的高度相同。
在这种情况下size=small
,修复所有框边距和边框宽度,但如果有必要,可以独立修复任何特定边距。
\documentclass{article}
\usepackage[most]{tcolorbox}
\newtcbox{hl}{size=small, colback=red!90!black,
on line, before upper=\strut}
\begin{document}
\hl{Word} \hl{one}, \hl{another} \hl{long} \hl{phrase}.
\end{document}
答案3
您text depth
还可以添加以考虑这种可能的长度。为了避免重叠,我建议也添加inner xsep
并指定一个合适的值以避免框重叠。
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\newcommand*\hl[1]{%
\tikz[overlay]%
\node [
draw,
fill={rgb:black,1;red,5},
inner sep=1mm,
inner xsep=0.2ex, % <-- added
anchor=text,
rectangle,
rounded corners=1mm,
% minimum height=8mm,
text height=2ex,
text depth=1ex, % <-- added
] {#1}
;%
\phantom{#1}%
}
\begin{document}
\hl{Word} \hl{one}, \hl{another} \hl{long} \hl{phrase}.
\end{document}
答案4
将 添加\vphantom{gh}
到您的\hl
宏中。这是因为您有不同类型的字母;有些字母在基线处深度更大,而有些字母高度更大。因此,我们从每个组中选择一个,以便在所有情况下具有相同的文本高度。此外,8mm
是绝对测量值,可能不适合某些字体大小,因此,一些fontsize
依赖测量值(例如)minimum height=1em
会更好。
\documentclass[12pt]{article}
\usepackage{tikz}
\newcommand*\hl[1]{\tikz[overlay]\node[draw, fill={rgb:black,1;red,5},
inner sep=1pt, anchor=text, rectangle, rounded corners=1mm,
minimum height=1em] {#1\vphantom{gh}};\phantom{#1}}
\begin{document}
\hl{Word} \hl{one}, \hl{another} \hl{long} \hl{phrase}.
\end{document}