在命令定义中可以使用非字母符号代替反斜杠吗?

在命令定义中可以使用非字母符号代替反斜杠吗?

我正在尝试定义以其他符号开头的新命令,而不是对于没有经验的 LaTeX 用户来说,\(backslash)使用并不那么直观。因此,在许多情况下,我更喜欢使用 ] 、 [ 或 / 等!例如,我更喜欢而不是因为 = 看起来像一个脱字符(在 a 上)!我尝试使用 来激活 = 或其他字符。\backslash=acircum\acircum\active

例如:我尝试定义以/like 开头的新命令/abc/abd但下面的一段代码没有成功!

\let\slash/
\catcode`/\active \def/abd{abd..}  \def/abc{abc...} Example: /abc  /abd \catcode`/=12 \let/\slash

但 TeX 抱怨

的使用/与其定义不符。

如何定义这样的命令?(我希望我的问题没有重复!)

答案1

我是否建议这样做:不!!!

宏转义字符的 catcode 为0,即 的 catcode/需要改为0

然而我并没有对文字进行测试/

/def/foo{blabla}然后您就可以使用!

\catcode`/=0
\def/abd{abd..}
/def/dosomethingstupid{Something not recommended because it looks weird!}

/abd
/dosomethingstupid

\bye

答案2

一种 expl3 方法:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn

\char_set_catcode_escape:N /
\NewDocumentCommand /Abc {} { abc }

\ExplSyntaxOff
\begin{document}
/Abc
\end{document}

就像我说的:这里有龙!

答案3

您不需要重新定义/的含义\,而是可以使用 LuaLaTeX 并 (a) 设置一个函数,将/文本中的所有 实例更改为\“动态” 并 (b) 将此函数分配给所谓的process_input_buffer回调,它在处理的早期阶段完成其工作,(La)TeX 可以完成任何常规工作。

当然,如果您的文档中确实需要正斜杠符号,那么您就不能再将其输入为/;而是需要写成/slash

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function slash2bslash ( line )
    return line:gsub ( "/", "\\" )
end
\end{luacode}
%% add the Lua function to "process_input_buffer" callback:
\AtBeginDocument{\directlua{luatexbase.add_to_callback
    ( "process_input_buffer", slash2bslash, "slash2bslash" )}} 

\begin{document}
/section{Hello}
/section{Good-bye}
/end{document}

答案4

amstex.texPlain TeX 的样式文件具有“@替代转义”,这也曾在(AMS-TeX 到 LaTeX 的第一次移植)中使用过,但在发布amslatex时就被废弃了。amsmath

在 AMS-TeX 中,可以输入@>f>g>要输入的内容\xrightarrow[g]{f}amsmath两个标签都是可选的,因此@>>>意味着向右箭头)。缺点是@必须将文字输入为@@

没有用于定义“@-commands”的接口,但是atMark Wooding 编写的包提供了该接口(可以使用 阅读文档texdoc mdwtools,因为这指向第一个匹配,也就是at.sty)。

例如,该包默认提供 @-command @/,通过

@/some text in italics/

(注意末尾的斜杠)与输入

\textit{some text in italics}

还预定义了@@打印 @。请注意,这@?与 : 不同,\?如果您这样做

\atdef ?{`?}
\newcommand\?{QQ}

的输出@?将不同于\?

当然,也可以复制该代码以允许其他前缀字符。大的缺点是前缀字符必须变成活动字符。如果你想使用 = 命令,比如你提议的=acircum,那么你就不能再输入=数学公式了(好吧,你需要非常小心)。

发布时amsmath,AMS 仔细考虑了 @ 命令并决定将其撤回,他们有很好的理由。我不确定还有什么=acircum比 更方便用户使用\acircum。实际上,我倾向于相信他们会非常困惑。

您只需要知道应该对命令进行转义,并且此转义的信号是\。记住不同命令的不同转义将是一场噩梦。可能很有趣(我在万圣节前夕写这个答案),但绝对不是一个好的用户界面。


其他建议的方法(例如做法)则\catcode`/=0截然不同。

如果你

\catcode`/=0
\newcommand{/Abc}{whatever}

然后你可以调用/Abc\Abc这将产生确切地相同的结果(除非您也更改了 的类别代码/)。当然,您不能使用/来打印斜线。

使用反斜杠作为转义符是有充分理由的。该字符很少(如果有的话)用于运行文本。对于集合论操作,存在语义上有意义的命令\setminus(以及将\backslash符号作为普通原子的命令)。ASCII 范围内没有其他字符处于相同情况;除了@它自己(除非在电子邮件地址中使用)。事实上,有一种 TeX 格式使用@和不\作为转义符:它是texinfo,几十年来一直用于 GNUinfo格式的 TeXing 文档。

相关内容