源文件中仅含有一个特殊控制字符的 (La)TeX

源文件中仅含有一个特殊控制字符的 (La)TeX

我觉得 (La)TeX 的一个烦人之处是特殊字符太多。如果要\ $ % & # _ ~ ^ { }在文档中的文本中包含 ,我们必须使用 对其进行转义\

我个人认为这很愚蠢——毕竟我们是编写文本文档而不是进行编程。

我认为如果有一种模式只有一个转义字符(并且\非常适合我)那就太好了全部命令和控制序列前面必须有\。注释可以是(例如)数学可以用等\%来引入。\$

是否有任何软件包/黑客/修改可以实现这一点?

答案1

我无法回答您关于是否有任何软件包可以做到这一点的问题。其中一些参数可以更改。例如,如果您总是使用\( ... \)而不是$...$,那么您可以将 设为$普通标点符号(或者您可以使用\$)。同样,\&\_可以\^轻松与它们的非斜线对应项交换。无需~激活 ,您可以轻松定义\~以具有相同的效果。正如 Will 在评论中指出的那样,#可以成为一个符号。

我无法让注释正常工作。我不知道如何让宏扩展为行尾标记。实际上,我甚至不确定这是 TeX 能够接受的标记之一。

真正的问题在于括号。你确实需​​要两个额外的字符来充当分组。你可以将两个不常用的字符作为括号。

因此,除非括号是特殊的并且没有行注释(尽管定义一个块注释可能很容易,\def\%#1\relax{}这可能足以满足您的目的),否则这似乎是有效的。

\newenvironment{plaintext}{%
        \catcode`\$12
        \def\&{&}%
        \catcode`\&12
        \def\_{_}%
        \catcode`\_12
        \def\^{^}%
        \catcode`\^12
        \catcode`\#12
        \catcode`\%12
        \let\~~%
        \catcode`\~12
}{}

像使用它一样

\begin{plaintext}
Here is some test text % ^ & _ $ # &.

How about some math \(x\_y\^z\). You're still out of luck with braces
though.
\end{plaintext}

答案2

在 ConTeXt 中,我们正在讨论添加一个宏\asciimode,该宏将设置 catcode,使得只有\{}空格(制表符、换行符和分页符)具有其通常含义。其他所有内容(包括%$)均设置为其他。

您可以使用 进入数学模式\math{...},使用 显示数学模式\startformula,使用 注释\starthidden等。在数学模式中,_^具有其通常含义。将有一个专用的“编程”环境,它将恢复传统的 TeX catcodes。

初步版本位于http://source.contextgarden.net/tex/context/base/catc-ctx.tex(尽管目前已被注释掉)

答案3

LuaTeX 定义了 TeX 中使用的单字符控制序列的原语:

\Usuperscript           ^
\Usubscript             _
\Ustartmath             $
\Ustopmath              $
\Ustartdisplaymath      $$
\Ustopdisplaymath       $$

因此,人们可以以某种方式使用这些原语,并将这些特殊字符的 catcode 设置为正常。这样就剩下百分号了,但我认为如果真的需要,可以定义一个不同的注释字符来代替它。

相关内容