![Активный символ только в текстовом режиме](https://rvso.com/image/472308/%D0%90%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9%20%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B2%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5.png)
Мне нужно заменить следующий код '
на \textquotesingle
, так как я предпочитаю этот символ при вводе апострофа.
\makeatletter
\catcode`\'=\active
\def'{\textquotesingle}
\makeatother
Проблема в том, что когда я хочу написать производную от функции, она не компилируется, мне приходится набирать \text{'}
, но это даже выглядит не очень хорошо, должно выглядеть немного наклонно.
Поэтому мне стало интересно, возможно ли сделать '
активным символ только в текстовом режиме, но не в математическом, чтобы я мог легко набирать текст \[ f'(x) \]
.
решение1
Вам необходимо различать текстовый и математический режимы, а также обновить внутренний макрос, который ожидает другого макроса '
в математическом режиме, чтобы обработать новый код категории.
\documentclass{article}
\makeatletter
\catcode`\'=\active
\protected\def'{\ifmmode\expandafter\active@math@prime\else\textquotesingle\fi}
\gdef\pr@m@s{%
\ifx'\@let@token
\expandafter\pr@@@s
\else
\ifx^\@let@token
\expandafter\expandafter\expandafter\pr@@@t
\else
\egroup
\fi
\fi}
\makeatother
\begin{document}
It's $f'$ or $f''$
\end{document}