Я экспериментирую с созданием пакета сокращенного форматирования. Я хочу использовать подчеркивание для разграничения подчеркнутого текстового диапазона, например так
some text _underlined text_ more text
Простое включение подчеркивания, определяющее макрос
\catcode`_=\active%
\def_#1_{\underline{1}}%
нецелесообразно, поскольку это явно противоречит использованию подчеркивания в математическом режиме.
Возможно ли, чтобы работали оба варианта? Если да, то как?
решение1
Можно, но лучше не надо. Серьёзно, и не только потому, что подчеркивание считается плохой практикой в типографике. Ничего не выиграешь.
\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}
решение2
Добрый вечер, попробуйте, если вам это подходит. Технически, подчеркивание — это активный символ из категории 8 в моем примере во время набора текста. Я использовал \sb
в математическом режиме и условии для закрытия \it
( \itshape
) в группе в текстовом режиме. \mycondition
Возвращается к false
автоматически при выходе из группы.
Спасибо за полезные комментарии и советы egreg, alexis и FK82! Было весело!
\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
Бонус:Это однострочный текст, в \newif
котором говорится:
\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