在纯 TeX 中定义快捷方式 (-> 到 \rightarrow)

在纯 TeX 中定义快捷方式 (-> 到 \rightarrow)

我想->为 创建一个快捷方式\rightarrow。使用 Plain TeX 可以实现吗?还是与加载的字体有关?

答案1

-数学变得活跃并赋予其适当的定义。

\edef\minus{\mathchar\the\mathcode`-\space}
\def\lookaheadminus{\futurelet\next\whatsafter}
\def\whatsafter{%
  \ifx\next>%
    \expandafter\togr
  \else
    \expandafter\minus
  \fi}
\def\togr>{\to}
\begingroup\lccode`~=`-
\lowercase{\endgroup\let~}\lookaheadminus
\mathcode`-="8000

$A->B$ and $a-b$

\bye

在此处输入图片描述

那么就避免这么做。

您可能喜欢使用 UTF-8 字符来实现此目的:

% <E2> is one of the prefixes for three byte UTF-8 sequences
\catcode"E2=\active
\protected\def^^e2#1#2{\csname\detokenize{^^e2#1#2}\endcsname}
%% similar definition to the above should be made for
%% other prefixes

% the following defines a single Unicode character
\def\defineutfchar#1{%
  \protected\expandafter\def\csname\detokenize{#1}\endcsname}

\defineutfchar{→}{\to}

$A→B$

\bye

答案2

一次谦虚的、有缺陷的尝试,灵感来自 tohecz,主要基于我对使用 Grawlixes 审查脏话

文件converter.lua

symbols = { "%-%>", "%=%>", "%<%-", "%<%=" }
replacements = { ["%-%>"] = "\\rightarrow ", ["%=%>"] = "\\Rightarrow ", ["%<%-"] = "\\leftarrow ", ["%<%="] = "\\Leftarrow " }

function replace(line)
    for _, element in pairs(symbols) do
        if string.find(line, element) then
           return string.gsub(line, element, replacements[element])
        end
    end
    return line, 0
end

function converter(line)
    occurrences = 0
    repeat
        line, occurrences = replace(line)
    until occurrences == 0
    return line
end

callback.register('process_input_buffer', converter)

然后,在主 TeX 文件中:

\directlua{dofile('converter.lua')}

Hello world, $A -> B$, $A => B$, $B <- A$, $B <= A$.

\bye

当然,此解决方案需要 LuaTeX。:)输出:

图像

我至少可以指出一个问题:

  • 简单的替换算法,它只是基于模式替换。文本的某些部分可能会出现严重问题。

改进此代码可能对读者来说是一项很好的练习。:)

相关内容