一字符宏

一字符宏

我想定義一個長度最多只有一個標記的巨集。

\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:您必須更改\catcodew 的,這不僅會影響以下命令開始與 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 可能比乳膠更寬容,但當然,這樣您就沒有現有軟體包的優勢。

相關內容