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}
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 \sb
no modo matemático e condição para fechamento \it
( \itshape
) em grupo no modo texto. O \mycondition
está retornando false
automaticamente 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 \newif
os 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