如何使下划线在环境中处于活动状态但在数学模式中保留其原始用途?

如何使下划线在环境中处于活动状态但在数学模式中保留其原始用途?

我正在尝试创建一个格式化简写包。我想使用下划线来分隔带下划线的文本范围,如下所示

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

平均能量损失

相关内容