我发现星号kpfonts
在上标/下标中使用时太小,因此,以下答案这里和这里,我使用@egreg 的聪明才智在数学模式中\DeclareMathActive
重新定义为:*
\textstyle\ast
\documentclass{article}
\usepackage{kpfonts,etoolbox}
\makeatletter
\newcommand{\DeclareMathActive}[2]{%
% #1 is the character, #2 is the definition
\expandafter\edef\csname keep@#1@code\endcsname{\mathchar\the\mathcode`#1 }
\begingroup\lccode`~=`#1\relax
\lowercase{\endgroup\def~}{#2}%
\AtBeginDocument{\mathcode`#1="8000 }%
}
\newcommand{\std}[1]{\csname keep@#1@code\endcsname}
\patchcmd{\newmcodes@}{\mathcode`\-\relax}{\std@minuscode\relax}{}{\ddt}
\AtBeginDocument{\edef\std@minuscode{\the\mathcode`-}}
\makeatother
\DeclareMathActive{*}{{\textstyle\ast}}
\begin{document}
$f_*\mathscr{F} \quad f^*\mathscr{F} \quad R^*$
$A*B$
\end{document}
这个方法效果很好,但是为了R^*
不用括号*
(如R^{*}
),我必须在 周围添加括号\textstyle\ast
。这样就可以删除\mathbin
等表达式中的空格A*B
。
是否有任何技巧\DeclareMathActive
可以同时允许*
上标/下标中的无支撑和正确的间距A*B
? 一个想法是扩展DeclareMathActive
以接受如下参数\mathchoice
:
\DeclareMathActiveChoice{<char>}{<display code>}{<text code>}{<script code>}{<scriptscript code>}
然后就可以使用\DeclareMathActiveChoice{*}{\ast}{\ast}{{\textstyle\ast}}{\ast}
。
但是我不知道如何实现这样的扩展。
仅供参考,以下是我为什么要这么做。比较
为了进行专业排版比较,以下是 Hartshorne 的代数几何:
答案1
您可以像宏一样创建^
和获取参数,这意味着将不再起作用,虽然需要 ,但这并不是很大的损失。_
x^\frac{1}{2}
x^{\frac{1}{2}}
\documentclass{article}
\usepackage{kpfonts,etoolbox}
\makeatletter
\newcommand{\DeclareMathActive}[2]{%
% #1 is the character, #2 is the definition
\expandafter\edef\csname keep@#1@code\endcsname{\mathchar\the\mathcode`#1 }
\begingroup\lccode`~=`#1\relax
\lowercase{\endgroup\def~}{#2}%
\AtBeginDocument{\mathcode`#1="8000 }%
}
\newcommand{\std}[1]{\csname keep@#1@code\endcsname}
\patchcmd{\newmcodes@}{\mathcode`\-\relax}{\std@minuscode\relax}{}{\ddt}
\AtBeginDocument{\edef\std@minuscode{\the\mathcode`-}}
\@makeother\^
\@makeother\_
\makeatother
\DeclareMathActive{*}{\mathbin{\textstyle\ast}}
\DeclareMathActive{^}{\foosup}
\DeclareMathActive{_}{\foosub}
\def\foosup#1{\sp{#1}}
\def\foosub#1{\sb{#1}}
\begin{document}
$f_*\mathscr{F} \quad f^*\mathscr{F} \quad R^*$
$A*B$
\end{document}