¿Cómo se activa el guión bajo en entornos pero se conserva su uso original en modo matemático?

¿Cómo se activa el guión bajo en entornos pero se conserva su uso original en modo matemático?

Estoy experimentando con la creación de un paquete abreviado de formato. Quiero usar el guión bajo para delimitar un intervalo de texto subrayado, así

some text _underlined text_ more text

Simplemente activando el guión bajo definiendo una macro

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

no es viable ya que esto obviamente choca con el uso del guión bajo en modo matemático.

¿Es posible que ambos funcionen? ¿Si es así, cómo?

Respuesta1

Puedes hacerlo, pero es mejor no hacerlo. De verdad, y no sólo porque el subrayado se considera una mala práctica en tipografía. No ganas nada.

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

ingrese la descripción de la imagen aquí

Respuesta2

Buenas noches, pruebe esto si se ajusta a sus necesidades. Técnicamente, el guión bajo es un carácter activo de la categoría 8 en mi ejemplo durante la composición tipográfica. Utilicé \sben el modo matemático y la condición para cerrar \it( \itshape) en un grupo en el modo texto. El \myconditionvuelve falseautomáticamente al salir de un grupo.

¡Gracias por los útiles comentarios y consejos, egreg, alexis y FK82! ¡Fue divertido!

\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

Prima:Esta es una frase ingeniosa con \newifinvolucrados:

\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

información relacionada