如何改变 encTeX 中 \xordcode 的行为

如何改变 encTeX 中 \xordcode 的行为

我的设置:web2cTeX (TeX Live)。
考虑 xyz.tex:

\xordcode"27="0D
\tt '
\bye

并使用以下命令进行编译:

tex -ini -enc '\input plain \dump' # we need this for \xordcode to work
tex -fmt plain xyz.tex

我需要在这里获取 ',但是 TeX 产生空结果,因为 \xordcode 使 TeX 将 ' ("27) 视为 ^M ("0D)。

那么,有没有办法改变默认的 \xordcode 行为,以便它在实际排版时只确定从相应的字体中取出哪个字符,而不是试图影响其他东西?

理想情况下,我想要实现的目标(在PlainTeX) 时生成 \char"12,当我输入 ` (\char"60) 时生成 \char"0D,当我输入 ' (\char"27) 时生成 \char"0D。如果与 \tt 一起使用,它们将提供我需要的正确的 ` and ',而不是默认的 ' and '。

答案1

使用 encTeX 的示例:

\mubyte\myquoteout '\endmubyte\def\myquoteout{\char"0D}
\mubyte\myquotein `\endmubyte\def\myquotein{\char"12}\mubytein=0
\let\oldtt\tt\def\tt{\mubytein=1\oldtt}
%
`test' {\tt `test'} `test'
\bye

答案2

TeX 在扩展处理器状态下无法重新编码(这是我最初的意图)。

使用主动字符的两个示例:

\catcode`'\active\def'{\char"0D}\catcode`'=12
\catcode"60\active\def`{\char"12}\catcode"60=12
\let\oldtt\tt\def\tt{\catcode"60\active\catcode`'\active\oldtt}
%
`test' {\tt `test'} `test'
\bye
\def\adef#1{\catcode`#1=13 \begingroup \lccode`\~=`#1\lowercase{\endgroup\def~}}
\let\oldtt\tt\def\tt{\adef`{\char"12}\adef'{\char"0D}\oldtt}
%
`test' {\tt `test'} `test'
\bye

(Petr Olšák 在 opmac.tex 中使用了 adef 宏)

相关内容