对齐 TikZ 文字叠加层

对齐 TikZ 文字叠加层

我正在使用 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};\phantom{#1}}

\hl{Word} \hl{one}, \hl{another} \hl{long} \hl{phrase}.

在此处输入图片描述

如您所见,虽然句子已对齐,但突出显示本身却没有对齐。我该如何修复此问题?

答案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}

在此处输入图片描述

相关内容