仍在学习活动字符、猫码、数学码等。
我知道如何让 *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
答案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}
你想用它吗?不,不用。;-)