这对于下面的解决方案来说是一个非常好的起点,但对于我的用例来说仍然不够完美。
我尝试对其进行调整,使其显示 3 个带圆圈的字母,带圆圈的字母之间有零个或多个字母,并且第一个和第三个圆圈中有零个或多个字母。换句话说,所需的方案是我想输入xOxOxOx
,其中每个O
代表一个带圆圈的可能不同的字母,每个x
代表零个或多个字母的序列。所需的结果如下所示(代码如下):
我不喜欢这个解决方案的地方在于,我必须1.3
为 硬编码一个乘法因子\f@size
。事实上,如果我删除*1.3
,那么圆的大小米会比周围的圆圈大我和杰。链接答案中的 1.6 似乎有点太多了。
以下是 MWE 验证的David Carlisle 的 TeXlive.net:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\makeatletter
\newcommand\stencil[7]{%
\tikz[outer sep=0, inner sep=0, baseline=(A.base), anchor=west]{
\node (A) {\vphantom{Wpm}#1};
\node[shape=circle, draw, minimum height={\f@size*1.3}] (B) at (A.east) {\vphantom{Wpm}#2};
\node (C) at (B.east) {\vphantom{Wpm}#3};
\node[shape=circle, draw, minimum height={\f@size*1.3}] (D) at (C.east) {\vphantom{Wpm}#4};
\node (E) at (D.east) {\vphantom{Wpm}#5};
\node[shape=circle, draw, minimum height={\f@size*1.3}] (F) at (E.east) {\vphantom{Wpm}#6};
\node (G) at (F.east) {\vphantom{Wpm}#7};
}%
}
\makeatother
before\stencil{h}{i}{j}{k}{}{m}{}after
beforeh
before \stencil{h}{i}{j}{k}{}{m}{} after
before h
\end{document}
答案1
使用text height={height("W")}
、text depth={depth("p")}
和text width={width("m")}
,您可以将节点文本的高度、深度和宽度设置为与 相同的高度W
、与 相同的深度p
和与 相同的宽度m
:
\documentclass{article}
\usepackage{tikz}
\tikzset{
mystyle/.style={
text centered,
text height={height("W")},
text depth={depth("p")}
},
mycircle/.style={
mystyle,
shape=circle, draw,
text width={width("m")}
}
}
\newcommand\mystencil[7]{%
\tikz[outer sep=0, inner sep=0, baseline=(A.base), anchor=west]{
\node[mystyle] (A) {#1};
\node[mycircle] (B) at (A.east) {#2};
\node[mystyle] (C) at (B.east) {#3};
\node[mycircle] (D) at (C.east) {#4};
\node[mystyle] (E) at (D.east) {#5};
\node[mycircle] (F) at (E.east) {#6};
\node[mystyle] (G) at (F.east) {#7};
}%
}
\begin{document}
before\mystencil{h}{i}{j}{k}{}{m}{}after
beforeh
before \mystencil{h}{i}{j}{k}{}{m}{} after
before h
\end{document}
答案2
也许我误解了这里的问题,但圈出单个内联字母的宏可能更简单,要么像您的示例中那样设置,要么像下面的代码中那样设置,并\vphantom
设置:text depth
text height
minimum size
\documentclass{article}
\usepackage{tikz}
\newcommand{\C}[1]{\tikz[baseline=(A.base)]{\node[draw, circle, minimum size=3ex, text depth=.5ex, text height=1.8ex, inner sep=0pt](A){#1};}}
\begin{document}
h \C{m}j\C{i}\C{j}\C{k} a
\end{document}
答案3
Unicode 有一个Enclosed Alphanumerics
代码块,因此您可以直接输入合适的字体,例如 Noto Sans Symbols 或 CJK 字体:
请注意,这里的圆圈是起点,字母被设计得适合,就像打字机一样,行距保持不变。
平均能量损失
\documentclass{article}
\usepackage{fontspec}
\newfontface{\cc}{Noto Sans Symbols}
\newfontface{\dd}{Noto Serif CJK JP}
\begin{document}
Examples
before {\cc hⓘjⓚlⓜ} after
{\cc before hⓘjⓚlⓜ after ⓗⓘⓙⓚⓛⓜ}
before {\dd hⓘjⓚlⓜ} after
{\dd before hⓘjⓚlⓜ after ⓗⓘⓙⓚⓛⓜ}
\end{document}
答案4
您不需要 TikZ 来声明您的\stencil
宏。它\enclosecircle
是在 Unicode 数学中声明的。
\newbox\circlebox
\setbox\circlebox=\hbox to1.1em{\hss$\phantom x\enclosecircle$\hss}
\def\ecirc#1{\leavevmode\rlap{\hbox to1.1em{\hss#1\hss}}\copy\circlebox}
\def\stencil#1#2#3#4#5#6#7{#1\ecirc#2#3\ecirc#4#5\ecirc#6#7}
before\stencil{h}{i}{j}{k}{}{m}{}after
\bye