Ich möchte ein Makro definieren, das höchstens ein Token lang ist.
\w
ist das Makro und alles nach w wird nicht als Teil des Makronamens behandelt. \wTest
ist dasselbe wie \w Test
. Es ist mir egal, wenn keine anderen Makros mit beginnenmsind durcheinander (zumindest in meinem Dokument, da ich keines verwende). Offensichtlich sollte es andere Pakete nicht beeinträchtigen.
Alternativ, falls dies nicht möglich ist, möchte ich die Möglichkeit haben, ein Sonderzeichen wie ^
oder neu zu definieren |
, um die Aufgabe zu erledigen. Ich würde es beispielsweise gerne ohne das verwenden.
Angenommen, ich möchte |
etwas eintippen
\documentclass{article}
\def\|{hello\,}
\begin{document}
\|world
\end{document}
Aber ich würde lieber |world verwenden. (Mein Dokument ist mit nur zwei oder drei speziellen Makros so einfach, dass es viel logischer wäre, diese Markierungen auf die einfachste mögliche Darstellung zu reduzieren. Ich werde beispielsweise in meinem Dokument niemals |
oder ^
auf normale Weise verwenden, damit ich sie zur Darstellung einiger Markierungen verwenden kann. Ich muss mich nur damit befassen, wie Tex sie interpretiert.) In meinem eigenen Dokument besteht kein Risiko, da es entweder einfacher Text oder sehr wenige Tex/Latex-Makros ist (ich verwende \vspace und \hspace und einige einfache Umgebungen wie Zentrierung zusammen mit 3 meiner eigenen Makros zur Markierung des einfachen Textes).
z.B,
Ich hätte
This is a |test paragraph^.
\begin{center} and this^ is |centered \end{center}
wobei | und ^ eine recht komplexe (lange) Auszeichnung sein könnten, die den ursprünglichen Absatz überfüllt. Tatsächlich wäre es schön, die Umgebungen sogar loszuwerden:
This is a |test paragraph^.
<and this^ is |centered>
(Beachten Sie, dass der zweite viel besser lesbar ist als der erste)
Antwort1
Ich denke, Ihr erster Vorschlag (ein Makro mit \w
diesem Namen, das \wTest
genauso behandelt wird wie \w Test
) würde eine Menge Hacking erfordern. Für den zweiten müssen Sie nur den Catcode des relevanten Zeichens auf setzen \active
.
\documentclass{article}
\catcode`|=\active
\def|{abc}
\begin{document}
|
\end{document}
Antwort2
Sie sollten Ihre Idee eines einzelnen Symbolbefehls fallen lassen \w
: Sie müssten die \catcode
von w ändern und dies würde nicht nur Befehle betreffen, dieStartmit w, sondern alle Befehle mit w im Namen und können recht überraschende Nebenwirkungen haben, selbst wenn Ihr Dokument selbst kein w enthält:
\documentclass{article}
\begin{document}
\catcode`\w=12
\tableofcontents
\section{abc}
\end{document}
Dasselbe gilt für Ihre anderen Ideen: Es reicht nicht aus, sicher zu sein, dass Sie ein bestimmtes Symbol niemals eingeben werden. Sie müssen auch sicher sein, dass es in keiner externen Datei (wie einem Inhaltsverzeichnis, einem AUX-Dokument, einem LOF-Dokument, einem BBL-Dokument usw.) verwendet wird.
Antwort3
Wenn Sie LuaTeX verwenden, ist es möglich, die Textdatei abzufangen, bevor sie von der Satzmaschine gesehen wird. In ConTeXt könnten Sie beispielsweise Folgendes verwenden:
\usemodule[translate]
\def\wTest{default}
\translateinput[\string\w][Something else ]
\starttext
\wTest
\enableinputtranslation
\wTest \crlf
\wAgain
\disableinputtranslation
\wTest
\stoptext
was gibt
SehenPortierung des luatex/ConTeXt-Moduls "translate" nach luaLaTeXfür eine Portierung des translate
Moduls auf luaLaTeX.
Antwort4
Am besten wählen Sie ein nicht-alphabetisches Zeichen, das nicht bereits für etwas anderes oder nur in besonderen Situationen verwendet wird.
|
wird von einigen Paketen (paarweise) als wörtliche Abkürzung verwendet, aber wenn Sie das nicht brauchen, ist es ein sinnvoller Kandidat. +
, <
oder >
könnten gute Kandidaten sein. Wenn Sie nie mit Sternchen versehene Latex-Befehle oder -Umgebungen brauchen, gibt es *
.
ich würde empfehlen, sich von diesen fernzuhalten: ~
, #
, $
, @
, %
, ^
, _
, und natürlich \
.
Einfaches Tex ist wahrscheinlich viel nachsichtiger als Latex, aber natürlich profitieren Sie dann nicht von den Vorteilen vorhandener Pakete.