我正在尝试定义以其他符号开头的新命令,而不是对于没有经验的 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.tex
Plain TeX 的样式文件具有“@
替代转义”,这也曾在(AMS-TeX 到 LaTeX 的第一次移植)中使用过,但在发布amslatex
时就被废弃了。amsmath
在 AMS-TeX 中,可以输入@>f>g>
要输入的内容\xrightarrow[g]{f}
(amsmath
两个标签都是可选的,因此@>>>
意味着向右箭头)。缺点是@
必须将文字输入为@@
。
没有用于定义“@-commands”的接口,但是at
Mark 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 文档。