Ein-Zeichen-Makros

Ein-Zeichen-Makros

Ich möchte ein Makro definieren, das höchstens ein Token lang ist.

\wist das Makro und alles nach w wird nicht als Teil des Makronamens behandelt. \wTestist 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 \wdiesem Namen, das \wTestgenauso 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 \catcodevon 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

Bildbeschreibung hier eingeben

SehenPortierung des luatex/ConTeXt-Moduls "translate" nach luaLaTeXfür eine Portierung des translateModuls 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.

verwandte Informationen