如何在 tikz 中锚定标签以进行基线对齐

如何在 tikz 中锚定标签以进行基线对齐

LaTeX 可以很好地处理下标和上标,自动纠正各种大小和位置问题。我正在尝试构建一个像下标和上标一样工作的函数,但较小尺寸的项目直接放置在主符号的上方/下方/左侧/右侧,而不是直立/直下/左上/左下。

如果这样的命令已经存在,或者您对如何构建命令有建议,我一定会很感激您的指点或想法。

在此期间,我尝试了很多方法(例如\array体操),但都存在问题。目前我正在考虑一种基于 TikZ 的方法,如下所示。

\newcommand{\putaround}[5]{
\begin{tikzpicture}[inner sep=0ex]
\node [label={[label distance=.1ex]below:$\scriptscriptstyle #2$},
 label={[label distance=-.15ex]left:$\scriptscriptstyle #3$},
 label={[label distance=.1ex]above:$\scriptscriptstyle #4$},
 label={[label distance=-.15ex]right:$\scriptscriptstyle #5$}]
{$#1$}; %[minimum height=1ex,minimum width=1ex] {$\mathfrak A$};
\end{tikzpicture}
}

\[
\putaround{\mathrm H}{n}{m}{p}{q}
\]

在此处输入图片描述

第一个问题是,左侧和右侧条目的基线偏离了(如果将 替换为 ,这种情况会变得尤为明显mm'。我尝试通过添加各种位置来调整标签锚定,anchor=mid但无济于事。

我的问题是,有没有办法通过固定标签来纠正基线/对齐问题?

答案1

您只需设置text depth=0pt左元素和右元素即可让 TikZ 忽略下降部,并text height=0.5ex忽略上升部(感谢 Andrew!):

\documentclass{article}
\usepackage{tikz}

\begin{document}
\newcommand{\putaround}[5]{
\begin{tikzpicture}[inner sep=0ex]
\node [label={[label distance=.1ex]below:$\scriptscriptstyle #2$},
 label={[label distance=-.15ex, text depth=0pt, text height=0.5ex]left:$\scriptscriptstyle #3$},
 label={[label distance=.1ex]above:$\scriptscriptstyle #4$},
 label={[label distance=-.15ex, text depth=0pt, text height=0.5ex]right:$\scriptscriptstyle #5$}]
{$#1$};
\end{tikzpicture}
}

\[
\putaround{\mathrm H}{n}{m'}{p}{q}
\]
\end{document}

答案2

我尝试通过在各个地方添加“anchor=mid”来调整标签锚定,但无济于事。

我也遇到了类似的无用回答我如何强制 TikZ 引脚角度? 使用与上述相同的 Extreme Hack,我得到了一些有用的方法。关键细节如下:

  1. (实际上不相关)anchor=base在主节点和baseline=0pt上使用tikzpicture
  2. 对于侧面标签,不要使用自动定位(如label=above:X)。使用label position并设置标签锚点。
  3. 但是要设置标签锚点,您需要进行破解,因为自动定位将覆盖您的明确选择。

代码:

\documentclass{article}
%\url{https://tex.stackexchange.com/q/97201/86}
\usepackage{tikz}

\makeatletter
\tikzset{reset label anchor/.code={%
    \let\tikz@auto@anchor=\pgfutil@empty
    \def\tikz@anchor{#1}
  },
  reset label anchor/.default=center
}
\makeatother


\newcommand{\putaround}[5]{
\begin{tikzpicture}[inner sep=0ex,baseline=0pt]
\node [anchor=base,label={[label
distance=.1ex]below:$\scriptscriptstyle #2$},
 label={[label distance=-.15ex,label position=mid west,reset label
anchor=base east]:$\scriptscriptstyle #3$},
 label={[label distance=.1ex]above:$\scriptscriptstyle #4$},
 label={[label distance=-.15ex,label position=mid east,reset label
anchor=base west]:$\scriptscriptstyle #5$}]
{$#1$}; %[minimum height=1ex,minimum width=1ex] {$\mathfrak A$};
\end{tikzpicture}
}

\begin{document}

\[
\putaround{\mathrm H}{n}{m'}{p}{q} \mathrm{H}
\]

\end{document}

结果:

被标签包围的字母

相关内容