Как сделать подчеркивание активным в средах, но сохранить его исходное использование в математическом режиме?

Как сделать подчеркивание активным в средах, но сохранить его исходное использование в математическом режиме?

Я экспериментирую с созданием пакета сокращенного форматирования. Я хочу использовать подчеркивание для разграничения подчеркнутого текстового диапазона, например так

some text _underlined text_ more text

Простое включение подчеркивания, определяющее макрос

\catcode`_=\active%
\def_#1_{\underline{1}}%

нецелесообразно, поскольку это явно противоречит использованию подчеркивания в математическом режиме.

Возможно ли, чтобы работали оба варианта? Если да, то как?

решение1

Можно, но лучше не надо. Серьёзно, и не только потому, что подчеркивание считается плохой практикой в ​​типографике. Ничего не выиграешь.

\documentclass{article}

\def\ustextormath{\ifmmode\expandafter_\else\expandafter\usunderline\fi}

\begingroup\lccode`~=`_
\lowercase{\endgroup
  \def\usunderline#1~{\underline{#1}}
  \protected\def~{\ustextormath}
}

\AtBeginDocument{\catcode`\_=\active}

\begin{document}

\section{Some _underlined_ text and $a_1$}

some text _underlined text_ more text and $a_1$

\end{document}

введите описание изображения здесь

решение2

Добрый вечер, попробуйте, если вам это подходит. Технически, подчеркивание — это активный символ из категории 8 в моем примере во время набора текста. Я использовал \sbв математическом режиме и условии для закрытия \it( \itshape) в группе в текстовом режиме. \myconditionВозвращается к falseавтоматически при выходе из группы.

Спасибо за полезные комментарии и советы egreg, alexis и FK82! Было весело!

\catcode`\_=13% Or use \active; from category 8.
\def\false{false}\def\mycondition{false}%
\def_{\ifmmode\sb
  \else
    \ifx\mycondition\false
      \begingroup\def\mycondition{true}\it%\itshape for LaTeXists
        \else
      \endgroup
    \fi
  \fi}
Text _more of text_ ToDo $abc_i^2 math$ even more _text_ etc.
%\bye

Бонус:Это однострочный текст, в \newifкотором говорится:

\catcode`_=13\newif\ifmyif\myiffalse\def_{\ifmmode\sb\else\ifmyif\endgroup\else\begingroup\myiftrue\it\fi\fi}Text _more of text_ ToDo $abc_i^2 math$ even more _text_ etc.%\bye

МВЭ

Связанный контент