如何使活动字符在数学模式和文本模式下发挥不同的作用?

如何使活动字符在数学模式和文本模式下发挥不同的作用?

仍在学习活动字符、猫码、数学码等。

我知道如何让 *hello* 在文本模式下显示粗体,并且 $X$ 在数学模式下生成粗体 $x$。我还知道如何让 *{hello} 在文本模式下生成粗体,以及让 $*x$ 在数学模式下生成粗体 $x$。

我不知道如何让 *hello* 在文本模式下显示粗体,以及如何让 $*x$ 在数学模式下显示粗体 $x$。(请注意星号的数量。)

(今天的点赞已经用完了,但明天会奖励好的答案)

我可以这样做:

\documentclass{article}

\usepackage{amsmath}
\usepackage{bm}

\begingroup\lccode`\~=`*\lowercase{\endgroup\def~#1~}{\ifmmode\bm{#1}\else{\bfseries #1}\fi}
\mathcode`*="8000
\catcode`*=13

\begin{document}
*this bold*  this not
$*x*$   % produces bold math
% I want $*x$ to produce a bold x
\end{document}

我也可以这样做:

\documentclass{article}

\usepackage{amsmath}
\usepackage{bm}

\begingroup\lccode`\~=`*\lowercase{\endgroup\def~#1}{\ifmmode\bm{#1}\else{\bfseries #1}\fi}
\mathcode`*="8000
\catcode`*=13

\begin{document}
*{this bold}  this not
$*x$   % produces bold math
\end{document}

答案1

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\usepackage{bm}

\catcode`*=13
\def*{\relax\ifmmode\expandafter\bm\else\expandafter\bstar\fi}
\def\bstar#1*{\textbf{#1}}



\begin{document}
*this bold*  this not
$*x x$   % produces bold math
\end{document}

答案2

这与大卫的回答没有太大区别,但它也修复了其他用法*(对于变体命令和表格前言)。

\documentclass{article}

\usepackage{amsmath}
\usepackage{bm}

\makeatletter
\newcommand{\jpi@active@ast}{%
  \relax % in case we're in a tabular
  \ifmmode
    \expandafter\jpi@active@ast@math
  \else
    \expandafter\jpi@active@ast@text
  \fi
}
\catcode`*=\active
\def*{\ifincsname\string*\else\expandafter\jpi@active@ast\fi}
\def\jpi@active@ast@text#1*{\textbf{#1}}
\let\jpi@active@ast@math\bm

% fix the kernel macros
\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} % fix \@ifstar
\def\@expast#1{\@xexpast #1*0x\@@}
\def\@xexpast#1*#2#3#4\@@{%
  \edef\reserved@a{#1}%
  \@tempcnta#2\relax
  \ifnum\@tempcnta>\z@
    \@whilenum\@tempcnta>\z@\do
       {\edef\reserved@a{\reserved@a#3}\advance\@tempcnta \m@ne}%
    \let\reserved@b\@xexpast
  \else
    \let\reserved@b\@xexnoop
  \fi
  \expandafter\reserved@b\reserved@a #4\@@}
\makeatother

\begin{document}
\section*{Unnumbered}
*this bold*  this not
$*x$   % produces bold math
\begin{equation*}
a=*x
\end{equation*}
\begin{tabular}[t]{*{2}{c}}
a & bb \\
cc & d
\end{tabular}
\end{document}

在此处输入图片描述

你想用它吗?不,不用。;-)

相关内容