在使用 times 字体时,我遇到了命令 \not in math mode 与 elsartical 类结合的意外行为。这是一个 MWE。
\documentclass[3p,times]{elsarticle}
\newcommand{\Pref}{\succ}
\newcommand{\Ranking}{\mathcal}
\newcommand{\PrefRanking}[1]{\Pref_{#1}}
\begin{document}
Test 1: $\alpha \Pref_\Ranking{R} \beta$.
Test 2: $\alpha \not\Pref_\Ranking{R} \beta$.
Test 3: $\alpha \PrefRanking{\Ranking{R}} \beta$.
Test 4: $\alpha \not\PrefRanking{\Ranking{R}} \beta$.
\end{document}
我获得的输出如下:
我希望测试 2 和测试 4 相同。另一方面,当我不使用 times 字体时,一切都很好。宏定义有什么问题吗?
答案1
times
使用选项txfonts.sty
。此 sty 重新定义\not
:\not\somecommand
尝试查找\nsomecommand
并使用它(如果存在)。这使得可以使用或设计比简单地在符号上加斜线更好的字形,但它使更\not
脆弱。
对于这个特殊情况,\not
最好在后面不要写太复杂的东西\not
。所以不要使用带参数的命令。
答案2
宏定义的建议:
\not
直接与 一起使用\succ
。- 宏
\PrefRanking
也在定义文本中使用,\Ranking
而不是在参数中再次执行此操作。
例子:
\documentclass[3p,times]{elsarticle}
\newcommand*{\Pref}{\succ}
\newcommand*{\Ranking}{\mathcal}
\newcommand*{\PrefRanking}[1]{\Pref_{\Ranking{#1}}}
\newcommand*{\NotPref}{\not\succ}
\newcommand*{\NotPrefRanking}[1]{\NotPref_{\Ranking{#1}}}
\begin{document}
Test 1: $\alpha \PrefRanking{R} \beta$.
Test 2: $\alpha \NotPrefRanking{R} \beta$.
\end{document}
答案3
我从中获取 MWE 的文档太长且太复杂,无法重新定义宏以避免使用参数,或者对否定情况使用新宏。感谢 @UlrikeFischer 的回答,我找到了这个解决方法。
我定义了宏
\newcommand{\nPrefRanking}[1]{\not\Pref_#1}
这样就解决了问题,而无需修改文档文本中宏的使用(请注意n
宏名称开头的,其余的宏名称与“正”宏的名称相同,并且#1
没有括在花括号中)。我发现重新定义是不够的(至少对于我的目的而言)
\newcommand{\PrefRanking}[1]{\Pref_{#1}}
进入
\newcommand{\PrefRanking}[1]{\Pref_#1}
\PrefRanking
(即,通过删除括起来的花括号来重新定义正例#1
),因为
\PrefRanking{\Ranking{R}_1}
(即,当\PrefRanking
使用时\not
前面没有带,并且的参数\PrefRanking
有下标),会产生双下标错误。