Como você ativa o sublinhado em ambientes, mas preserva seu uso original no modo matemático?

Como você ativa o sublinhado em ambientes, mas preserva seu uso original no modo matemático?

Estou experimentando criar um pacote abreviado de formatação. Quero usar o sublinhado para delimitar um intervalo de texto sublinhado, assim

some text _underlined text_ more text

Simplesmente ativando o sublinhado definindo uma macro

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

não é viável, pois obviamente colide com o uso do sublinhado no modo matemático.

É possível que ambos funcionem? Se sim, como?

Responder1

Você pode fazer isso, mas é melhor não fazer. Realmente, e não apenas porque sublinhar é considerado uma má prática em tipografia. Você não ganha 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}

insira a descrição da imagem aqui

Responder2

Boa noite, tente isso se for adequado às suas necessidades. Tecnicamente, o sublinhado é um caractere ativo da categoria 8 no meu exemplo durante a composição tipográfica. Utilizei \sbno modo matemático e condição para fechamento \it( \itshape) em grupo no modo texto. O \myconditionestá retornando falseautomaticamente ao sair de um grupo.

Obrigado pelos comentários e dicas úteis egreg, alexis e FK82! Foi 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

Bônus:Esta é uma frase com \newifos envolvidos:

\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

informação relacionada