Wie kann man den Unterstrich in Umgebungen aktivieren, aber seine ursprüngliche Verwendung im Mathematikmodus beibehalten?

Wie kann man den Unterstrich in Umgebungen aktivieren, aber seine ursprüngliche Verwendung im Mathematikmodus beibehalten?

Ich experimentiere mit der Erstellung eines Formatierungskurzschriftpakets. Ich möchte den Unterstrich verwenden, um einen unterstrichenen Textabschnitt abzugrenzen, etwa so

some text _underlined text_ more text

Einfaches Aktivieren des Unterstrichs durch Definieren eines Makros

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

ist nicht durchführbar, da dies offensichtlich mit der Verwendung des Unterstrichs im Mathematikmodus kollidiert.

Ist es möglich, beides zum Laufen zu bringen? Und wenn ja, wie?

Antwort1

Sie können es tun, aber es ist besser, es nicht zu tun. Wirklich, und nicht nur, weil Unterstreichen in der Typografie als schlechte Praxis gilt. Sie gewinnen nichts.

\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}

Bildbeschreibung hier eingeben

Antwort2

Guten Abend, probieren Sie das bitte aus, wenn es Ihren Anforderungen entspricht. Technisch gesehen ist der Unterstrich in meinem Beispiel beim Satz ein aktives Zeichen aus Kategorie 8. Ich habe \sbim Mathemodus und in einer Gruppe im Textmodus die Bedingung zum Schließen \it( ) verwendet. Beim Verlassen einer Gruppe wird automatisch wieder auf zurückgesetzt .\itshape\myconditionfalse

Vielen Dank für die nützlichen Kommentare und Tipps, Egreg, Alexis und FK82! Es hat Spaß gemacht!

\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

Bonus:Dies ist ein Einzeiler mit \newiffolgendem Inhalt:

\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

MWE

verwandte Informationen