
我想定義一個長度最多只有一個標記的巨集。
\w
是宏,w 之後的任何內容都不被視為宏名稱的一部分。\wTest
與 相同\w Test
。我不在乎是否沒有其他巨集開頭w搞砸了(至少在我的文檔中,因為我沒有使用任何)。顯然它不應該幹擾其他包。
或者,如果不可能這樣做,我希望能夠重新定義一些特殊字符,例如^
或|
來完成這項工作。我想說,可能喜歡在沒有 .
假設我想|
輸入一些內容
\documentclass{article}
\def\|{hello\,}
\begin{document}
\|world
\end{document}
但我寧願做|世界。 (我的文件非常簡單,只有兩個或三個特殊宏,因此將這些標記減少為盡可能最簡單的表示會更加合乎邏輯。例如,我永遠不會以任何正常方式在我的文件中使用|
或,所以我^
可以使用它們來表示一些標記。 \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 模組「翻譯」移植到 luaTeX用於將模組移植translate
到 luaLaTeX。
答案4
最好選擇一個非字母字符,即尚未用於其他用途或僅在特殊情況下使用的字符。
|
某些軟體包(成對)用於逐字速記,但如果您不需要它,那麼它是一個合理的候選者。 +
,<
或者>
可能是不錯的候選人。如果您從不需要加星號的 Latex 指令或環境,那麼*
.
我建議遠離這些:~
、、、、、、、、,當然還有。#
$
@
%
^
_
\
plain tex 可能比乳膠更寬容,但當然,這樣您就沒有現有軟體包的優勢。