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}
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 \sb
im 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
\mycondition
false
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 \newif
folgendem 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