如果我使用类似的结构
\def\-{-minus-}
A\-B\footnote{A\-B}
那么结果是A-minus-B
主文本区域中预期的结果,但脚注仅包含AB
。
我做了更多的测试,似乎\def\-
上述声明在脚注中被忽略了。
有没有办法来解决这个问题?
答案1
重新定义\-
并不是最好的选择,因为该命令是基本的 LaTeX 命令之一,并且在多个地方(包括脚注,正如您所发现的)被内部重新定义。
如果您的目的是定义一个通用命令\g
(不要\a
像最初提议的那样使用,原因与 相同\-
),您可以利用expl3
和\peek_regex_replace_once:nnTF
。
此命令通过寻找正则表达式的匹配来工作,如果匹配,则按照您的意愿替换找到的标记,并可以在获得的标记列表上执行某些操作;如果不匹配,则可以执行其他一些代码。
此处的替换包括将匹配的标记括起来,以便函数\curious_g:n
可以对它们进行操作。 的工作方式\curious_g:n
应该很清楚。请注意,您甚至可以在 后面使用多个字符\g
。
\documentclass{article}
\DeclareMathSymbol{\mathhyphen}{\mathord}{operators}{"2D}
\ExplSyntaxOn
\NewDocumentCommand{\g}{}
{
\peek_regex_replace_once:nnTF
{ ( \- | \= | \+ | \!\= ) } % look for
{ \cB\{ \1 \cE\} } % replace with
{ \curious_g:n } % do if match
{ \BAD } % do if no match
}
\cs_new_protected:Nn \curious_g:n
{
\str_case:nn { #1 }
{
{-}{\mathhyphen}
{=}{\equiv}
{+}{\oplus}
{!=}{\not\equiv}
}
}
\ExplSyntaxOff
\begin{document}
$a \g- b$
$a \g= b$
$a \g+ b$
$a \g!= b$
$a \g? b $ % error
${\g}$ % error
\end{document}
你应该\BAD
使用一些更具信息量的东西。
答案2
上述讨论清楚地表明,重新定义\-
是一个坏主意。
尽管如此,我需要某些字符的“我的版本”,这是我的解决方案:基本上,它具有上面提到的风格\def\a-{-minus-}
,但它对多个字符重用了单字母文字命令(我将其更改为\g
):
\usepackage{ifthen}
\mathchardef\myhyphen="2D
\newcommand{\g}[1]{%
\ifthenelse{\equal{#1}-}{\myhyphen}{}%
\ifthenelse{\equal{#1}=}{\equiv}{}%
\ifthenelse{\equal{#1}+}{\oplus}{}%
}
结果可见于$\g+ \g= \g-$
:它满足我的需要。