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