在我的问题答案的第一个版本中圆角哥德尔编码?,Sandy G 提出了以下解决方案:
\newcommand{\godel}[1]{{}\mathbin{\vcenter{\hbox{\tikz{
\node[inner ysep=-1pt, inner xsep=3pt](M){$#1\strut$};
\draw[rounded corners=.5mm]([xshift=-1mm]M.north east)--(M.north east)--++(0,-.1);
\draw[rounded corners=.5mm]([xshift=1mm]M.north west)--(M.north west)--++(0,-.1);
}}}}{}}
对于我的文档来说,这个解决方案相当令人满意,但如果我在章节标题中放入 $\godel{A}$,就会产生许多错误,导致文档无法编译。我尝试了两种方法来保护它,即通过。$\protect\godel{A}\protect$ 和 $\protect\godel[thick]{A}$。
还有其他方法可以保护章节标题中的 $\godel{A}$ 并帮助我吗?
答案1
这完美地工作:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\newcommand{\godel}{}% just to avoid redefining
\DeclareRobustCommand{\godel}[1]{%
\mspace{1\medmuskip}%
\vcenter{\hbox{%
\begin{tikzpicture}
\node[inner ysep=-1pt, inner xsep=3pt](M){$#1\strut$};
\draw[rounded corners=.5mm]([xshift=-1mm]M.north east)--(M.north east)--++(0,-.1);
\draw[rounded corners=.5mm]([xshift=1mm]M.north west)--(M.north west)--++(0,-.1);
\end{tikzpicture}%
}}%
\mspace{1\medmuskip}%
}
\begin{document}
\tableofcontents
\section{$x\godel{A}y$}
\end{document}
请注意,我改变了如何分隔结构:使用{}\mathbin{...}{}
引入灵活的空间,这显然不是想要的:如果公式需要缩小,空间可能会消失。 则不然\mspace{1\medmuskip}
,因为它不灵活(默认情况下会在 周围添加相同的量\mathbin
)。
更好的定义:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\DeclareRobustCommand{\godel}[1]{%
\mspace{1\medmuskip}%
\vphantom{#1}%
\begin{tikzpicture}[baseline=(M.south)]
\node[inner ysep=0pt,inner xsep=3pt](M){\smash[b]{$#1\mathstrut$}};
\draw[rounded corners=.5mm]([xshift=-1mm]M.north east)--(M.north east)--++(0,-.1);
\draw[rounded corners=.5mm]([xshift=1mm]M.north west)--(M.north west)--++(0,-.1);
\end{tikzpicture}%
\mspace{1\medmuskip}%
}
\begin{document}
\tableofcontents
\section{$x\godel{A}y$}
a $\godel{f}$ b
\end{document}