수학 모드에서 별표(*) 재정의

수학 모드에서 별표(*) 재정의

중앙 별표(*) 수학 연산자에 별도 글꼴의 기호를 사용하려고 합니다. 문제의 글꼴에는 높이가 높은(많은 글꼴에서) 별표 문자 모양(*)만 있는데, 이를 낮추어 가운데 정렬 변형에 사용하려고 합니다.

수학 모드에서 연산자는 의 150행과 297행에서 정확히 동일한 방식으로 정의된 *및 에서 모두 사용할 수 있습니다 .\astfontmath.ltx

\ast로 재정의할 수 있지만 \renewcommand*다른 짐승인 것 같습니다. 매크로로 변경하거나 다른 방법으로 글리프의 기준선을 변경할 수 있습니까?

\documentclass{minimal}

\DeclareSymbolFont{mymathoperators}{OT1}{phv}{m}{n}

\DeclareMathSymbol{\protoast}{\mathbin}{mymathoperators}{"2A}
\DeclareMathSymbol{*}{\mathbin}{mymathoperators}{"2A}

\renewcommand*{\ast}{\mathbin{\raisebox{-0.7ex}{\ensuremath{\protoast}}}}

\begin{document}

\( good \ast , bad * . \)

\end{document}

답변1

사용@egreg의\DeclareMathActive:

여기에 이미지 설명을 입력하세요

\documentclass{article}

\usepackage{amsmath}
\usepackage{etoolbox}

\DeclareSymbolFont{mymathoperators}{OT1}{phv}{m}{n}

\DeclareMathSymbol{\protoast}{\mathbin}{mymathoperators}{"2A}
\DeclareMathSymbol{*}{\mathbin}{mymathoperators}{"2A}

\renewcommand*{\ast}{\mathbin{\raisebox{-0.7ex}{\ensuremath{\protoast}}}}

\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{*}{\ast}

\begin{document}

\(good \ast , bad * . \)

\end{document}

관련 정보