如何生成一个类似于 ː (\textlengthmark) 的符号,并且中间有一个小圆圈?

如何生成一个类似于 ː (\textlengthmark) 的符号,并且中间有一个小圆圈?

我想生成一个 符号,其中tipa\textlengthmark完美重叠一个小圆圈,使得符号具有垂直和水平对称性。

我该怎么做呢?(我怀疑这tikz会有所帮助,但我不确定是否真的需要这种机器。)

一些澄清:

  • 该符号应缩放到任意大小。(我正在使用anyfontsize。)
  • 圈要小,就是我想要\text{\textcircled{\(\Utextlengthmark\)}}(用圆圈包围)。
  • 这里有几个类似的问题,但重点是我不想手动调整垂直对齐。应该有一种方法可以让 TeX 自动匹配它们的水平垂直中心。另外,如果我对 使用了手动移位量\raisebox,那么在下标上下文等中它将不起作用。(我从来没有弄清楚如何让手动缩放和移位的符号自动在下标中“工作”。)

以下代码(改编自这里

\documentclass{memoir}
\usepackage[T3,T1]{fontenc}
\usepackage[noenc,safe]{tipa}

\def\typeC{\mathrel{%
    \mathchoice{\TYPEC}{\TYPEC}{\scriptsize\TYPEC}{\tiny\TYPEC}%
}}
\def\TYPEC{{%
    \setbox0\hbox{\textlengthmark}%
    \rlap{\hbox to \wd0{\hss\(\circ\)\hss}}\box0
}}

\begin{document}

\(\typeC + S_{\typeC}\)

\end{document}

有两个问题:

  • 太大\circ了;最好是大约一半的尺寸。
  • 没有\circ垂直居中。

答案1

以下解决方案从\textlengthmark和构造符号\circ。后一个符号\circ垂直居中于当前数学轴。首先将的中间\circ移动到基线,然后将其缩小到高度的 28% \textlengthmark。然后将调整大小的圆移动到中间\textlengthmark\text需要\textlengthmark根据当前数学样式调整文本符号的大小。\mathpalette用于构造当前数学样式的符号:

\documentclass{article}
\usepackage{tipa}
\usepackage{amstext}% or amsmath
\usepackage{graphicx}% or graphics

\makeatletter
\newcommand*{\circlengthmark}{%
  {\CircLengthMarkAux}%
  % curly braces allow the use of the symbol after ^ or _ without braces
}
\DeclareRobustCommand*{\CircLengthMarkAux}{%
  \ensuremath{%
    \mathpalette\@CircLengthMarkAux{\text{\textlengthmark}}%
  }%
}
\newsavebox\clm@boxa
\newsavebox\clm@boxb
\newcommand*{\@CircLengthMarkAux}[2]{%
  % #1 contains one of \displaystyle, \textstyle,
  %    \scriptstyle or \scriptscriptstyle
  % #2 contains the length mark symbol
  \sbox\clm@boxa{$\m@th#1#2$}% \textlengthmark
  \sbox\clm@boxb{$#1\vcenter{}$}% math axis
  \hbox to 0pt{%
    \kern.5\wd\clm@boxa
    \hss
    \raise.5\ht\clm@boxa\hbox{%
      \resizebox{!}{.14\ht\clm@boxa}{% adopt the factor to your needs
        \lower\ht\clm@boxb\hbox{$\m@th#1\circ$}%
      }%
    }%
    \hss
    \kern-.5\wd\clm@boxa
  }%
  \usebox\clm@boxa
}
\makeatother

\begin{document}
Symbol: \circlengthmark (\textlengthmark)
$\circlengthmark^{\circlengthmark^\circlengthmark}$
\end{document}

结果

更新:更加完美

在放大倍数较高的情况下,圆圈不是完全居中,而是稍微低了一点。原因是 的字符边界框 \textlengthmark。它的上界和下界太小,大小不对称:

\documentclass[border=.1pt]{standalone}
\usepackage{tipa}
\usepackage{xcolor}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.02pt}
\begin{document}
\fbox{\color{red}\textlengthmark}%
\fbox{\textcolor{red}{\raisebox{0pt}[1.025\height][0.02\height]{\textlengthmark}}}%
\fbox{\color{red}$\circ$}
\end{document}

炭箱

中间的符号通过扩大高度和深度来进行补偿。

\documentclass[border=.1pt]{standalone}
\usepackage{tipa}
\usepackage{amstext}
\usepackage{graphicx}

\makeatletter
\newcommand*{\circlengthmark}{%
  {\CircLengthMarkAux}%
  % curly braces allow the use of the symbol after ^ or _ without braces
}
\DeclareRobustCommand*{\CircLengthMarkAux}{%
  \ensuremath{%
    \mathpalette\@CircLengthMarkAux{\text{\textlengthmark}}%
  }%
}
\newsavebox\clm@boxa
\newsavebox\clm@boxb
\newcommand*{\@CircLengthMarkAux}[2]{%
  % #1 contains one of \displaystyle, \textstyle,
  %    \scriptstyle or \scriptscriptstyle
  % #2 contains the length mark symbol
  \sbox\clm@boxa{%
    % \textlengthmark with fix of character bounding box
    \raisebox{0pt}[1.025\height][.02\height]{%
      $\m@th#1#2$%
    }%
  }%
  \sbox\clm@boxb{$#1\vcenter{}$}% math axis
  \hbox to 0pt{%
    \kern.5\wd\clm@boxa
    \hss
    \dimen@=.5\ht\clm@boxa
    \advance\dimen@ by -.5\dp\clm@boxa
    \raise\dimen@\hbox{%
      \resizebox{!}{.14\ht\clm@boxa}{% adopt the factor to your needs
        \lower\ht\clm@boxb\hbox{$\m@th#1\circ$}%
      }%
    }%
    \hss
    \kern-.5\wd\clm@boxa
  }%
  \usebox\clm@boxa
}
\makeatother

% for testing
\usepackage{xcolor}
\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.02pt}

\begin{document}
\fbox{\color{red}\circlengthmark}%
\textsuperscript{\fbox{\color{red}\circlengthmark}}
\end{document}

字符边界框修复后的结果

为了更加完美,\textlengthmark和圆圈符号都需要用更好的字体替换或从头开始绘制(例如tikz)。

相关内容