我该如何保护此 \godel 命令的章节标题?

我该如何保护此 \godel 命令的章节标题?

在我的问题答案的第一个版本中圆角哥德尔编码?,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}

在此处输入图片描述

相关内容