我想要在哥德尔代码中在变量 x 上加一个点,并使用以下代码$\exists x\mathcal{T}\Godelnum{A(\dot{x)}}$
,并在序言中使用这个代码来获得漂亮的角引号:
\newbox\gnBoxA
\newdimen\gnCornerHgt
\setbox\gnBoxA=\hbox{$\ulcorner$}
\global\gnCornerHgt=\ht\gnBoxA
\newdimen\gnArgHgt
\def\Godelnum #1{%
\setbox\gnBoxA=\hbox{$#1$}%
\gnArgHgt=\ht\gnBoxA%
\ifnum \gnArgHgt<\gnCornerHgt \gnArgHgt=0pt%
\else \advance \gnArgHgt by -\gnCornerHgt%
\fi \raise\gnArgHgt\hbox{$\ulcorner$} \box\gnBoxA %
\raise\gnArgHgt\hbox{$\urcorner$}}
但是点在右边的位置太高了。如何才能在变量 x 上方获得正常的点?
答案1
正如之前评论的那样,您已经
\Godelnum{A(\dot{x)}}
因此,点位于组合的上方x)
,因此相对于两个项目而言,它更高且位于中心。
你应该修复到
\Godelnum{A(\dot{x})}
上面那个是你输入的,下面那个是固定的。
但是,您的代码并不是真正意义上的 LaTeX 代码,并且您可以通过使用正确的 LaTeX 代码来省去设置框(您的代码也有几个错误)。
\documentclass{article}
\usepackage{amsmath,amssymb}
\newlength{\gnCornerHgt}
\newlength{\gnArgHgt}
\newcommand{\Godelnum}[1]{%
\settoheight{\gnCornerHgt}{$\ulcorner$}%
\settoheight{\gnArgHgt}{$#1$}%
\ifdim\gnArgHgt<\gnCornerHgt
\setlength{\gnArgHgt}{0pt}%
\else
\addtolength{\gnArgHgt}{-\gnCornerHgt}%
\fi
\raisebox{\gnArgHgt}{$\ulcorner$}%
#1%
\raisebox\gnArgHgt{$\urcorner$}%
}
\begin{document}
$x\mathcal{T}\Godelnum{A(\dot{x)}}$
$x\mathcal{T}\Godelnum{A(\dot{x})}$
$x\mathcal{T}\Godelnum{\begin{bmatrix} 1 \\ 1 \end{bmatrix}}$
\end{document}
长度\gnCornerHgt
应该在运行时设置,因为它必须取决于当前字体大小。
和后面\ifnum
的 一样, 都是错误的。在这种情况下,TeX 有一个保护机制,但你最终会得到一个不想要的标记(准确地说是“冻结” )。%
0pt
\relax
我知道\Godelnum
矩阵实际上没有什么意义,我用它来表明高度是所需的高度。
一个版本也可以改变下标或上标的大小。我添加了一个\LARGE
版本来显示它在不同字体大小下也能正常工作。
请注意,添加的\mathinner
那个会增加一个狭窄的空间。
\documentclass{article}
\usepackage{amsmath,amssymb}
\newlength{\gnCornerHgt}
\newlength{\gnArgHgt}
\makeatletter
\newcommand{\Godelnum}[1]{\mathinner{\mathpalette\Godelnum@{#1}}}
\newcommand{\Godelnum@}[2]{%
\begingroup
\settoheight{\gnCornerHgt}{$\m@th#1\ulcorner$}%
\settoheight{\gnArgHgt}{$\m@th#1#2$}%
\ifdim\gnArgHgt<\gnCornerHgt
\setlength{\gnArgHgt}{0pt}%
\else
\addtolength{\gnArgHgt}{-\gnCornerHgt}%
\fi
\raisebox{\gnArgHgt}{$\m@th#1\ulcorner$}%
#2%
\raisebox\gnArgHgt{$\m@th#1\urcorner$}%
\endgroup
}
\makeatother
\begin{document}
$x\mathcal{T}\Godelnum{A(\dot{x})}$
$x_{\Godelnum{y}}$
\LARGE
$x\mathcal{T}\Godelnum{A(\dot{x})}$
\end{document}