我想定义一个长度最多为一个标记的宏。
\w
是宏,并且 w 之后的任何内容都不被视为宏名称的一部分。\wTest
与 相同\w Test
。我不关心是否没有其他以 开头的宏瓦很乱(至少在我的文档中是这样的,因为我没有使用任何软件包)。显然它不应该干扰其他软件包。
或者,如果无法做到这一点,我希望能够重新定义一些特殊字符,如^
或|
来完成这项工作。我可能会想在不使用 的情况下使用它。
假设我想|
输入一些内容
\documentclass{article}
\def\|{hello\,}
\begin{document}
\|world
\end{document}
但我宁愿做 |world。(我的文档非常简单,只有两个或三个特殊的宏,因此将这些标记简化为最简单的表示形式更加合乎逻辑。例如,我永远不会以任何正常方式在我的文档中使用|
或^
,因此我可以使用它们来表示一些标记。我只需要处理 tex 如何解释它们)在我自己的文档中没有风险,因为它要么是平面文本,要么是很少的 tex/latex 宏(我使用 \vspace 和 \hspace 以及一些简单的环境,如居中以及我自己的 3 个宏来标记纯文本)。
例如,
我可能有
This is a |test paragraph^.
\begin{center} and this^ is |centered \end{center}
其中 | 和 ^ 可能是相当复杂(长)的标记,会使原始段落变得混乱。事实上,甚至摆脱环境也会很好:
This is a |test paragraph^.
<and this^ is |centered>
(请注意,第二个比第一个更易读)
答案1
我认为您的第一个建议(一个宏,\w
其\wTest
处理方式与 相同\w Test
)需要进行大量修改。对于第二个建议,您只需将相关字符的 catcode 设置为 即可\active
。
\documentclass{article}
\catcode`|=\active
\def|{abc}
\begin{document}
|
\end{document}
答案2
你应该放弃你的想法,一个单一的符号命令\w
:你必须改变\catcode
的w,这不仅会影响命令,开始使用 w 但所有名称中都带有 w 的命令都可能产生相当令人惊讶的副作用,即使您的文档本身不包含任何 w:
\documentclass{article}
\begin{document}
\catcode`\w=12
\tableofcontents
\section{abc}
\end{document}
您的其他想法也是如此:仅仅确保您永远不会输入特定符号是不够的。您还必须确保没有外部文件(如 toc、aux、lof、bbl 等)使用它。
答案3
如果您使用的是 LuaTeX,则可以在排版引擎看到文本文件之前对其进行拦截。例如,在 ConTeXt 中,您可以使用以下命令:
\usemodule[translate]
\def\wTest{default}
\translateinput[\string\w][Something else ]
\starttext
\wTest
\enableinputtranslation
\wTest \crlf
\wAgain
\disableinputtranslation
\wTest
\stoptext
这使
看将 luatex/ConTeXt 模块“translate”移植到 luaLaTeX用于将模块移植translate
到 luaLaTeX。
答案4
最好选择非字母字符,即尚未用于其他用途的字符,或仅在特殊情况下使用的字符。
|
被一些软件包成对使用,用于逐字速记,但如果您不需要它,它是一个合理的候选者。 +
,<
或者>
可能是很好的候选者。如果您不需要带星号的 latex 命令或环境,那么可以使用*
。
我建议远离这些~
:#
,,,,,,,,$
当然@
还有。%
^
_
\
普通的 tex 可能比乳胶更容易让人接受,但当然你就无法享受现有包装的优势了。