我想生成一个 符号,其中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
)。