So fügen Sie die Pipe | als funktionierenden Befehl in ein Makro ein \newcommand

So fügen Sie die Pipe | als funktionierenden Befehl in ein Makro ein \newcommand

Ich bin ein fauler Kerl und verwende gerne und oft neue Befehle. Nach der Fertigstellung werde ich sie durch den Originalcode ersetzen.

Ich hätte gerne eine Abkürzung für den \verb|.. Text hier .. |

Aber hier läuft etwas schief – ich weiß nicht, wie ich meinen Code reparieren kann:

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}


\newcommand\bv{\verb|}
\newcommand\ev{|}

\begin{document}
1. Putting \color{green!40!black} \verb| hurz |  \color{black} works 


but: 


2. Putting \bv hurz \ev fails.
\end{document}

Da ich kein \TeXZauberer, sondern ein Anfänger bin, bin ich für jeden Hinweis sehr dankbar!

Ich habe vergessen: Arbeiten mit PDFLateX unter Linux.

Grüße!

Antwort1

Verbatim-Befehle müssen die Endzeichenfolge finden, ohne Befehle zu erweitern. Sie können sie daher nicht in einem \evBefehl verbergen.

Sie können fancyvrb verwenden, um kurze wörtliche Ausdrücke zu definieren, siehe die Dokumentation:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{fancyvrb}

\DefineShortVerb{\|}

\begin{document}
Putting |\section{abc} hurz| work
\end{document}

Antwort2

\verbmuss wissen, wo es aufhören soll, muss in der Zwischenzeit aber jede spezielle Interpretation von Zeichen deaktivieren, einschließlich des Backslashs.

Man könnte meinen, man grenzt das Material ab mit demSchnur \ev, aber das wäre sehr umständlich. Die Abgrenzung mit einem einzelnen Zeichen, das nicht im wörtlichen Ausdruck enthalten ist, ist viel einfacher. Aber das funktioniert auf sehr indirekte Weise.

Wenn LaTeX findet\verb untersucht es das nächste Zeichen undändert seinen Kategoriecodeum „Gruppenende“ zu bedeuten. Wenn also eine weitere Instanz davon gefunden wird, deaktiviert die Gruppenende-Natur des Zeichens automatisch alle speziellen Einstellungen, die für den Verbatim-Modus erforderlich sind. Was ist das Problem bei der Definition \evvon als |? Erstens kann dies |nicht geändert werden, um „Gruppenende“ zu bedeuten, aber das ist das geringste Problem:\ev würde als Zeichenfolge untersucht, die aus dreinormalZeichen, da \verbes in Kraft ist! Es kann also nicht als Befehl interpretiert werden.

Wenn Sie Inline-Wortmaterial einfärben möchten, gibt es einfachere Möglichkeiten. Ich zeige zwei: eine mit einer einzelnen Farbe, die ein \greenverbMakro mit derselben Syntax wie definiert \verb. Die zweite Methode definiert, \colorverbdass als Argument eine Farbspezifikation verwendet wird und dann einen generischen wörtlichen Farbbefehl aufruft.

\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}

\newverbcommand{\greenverb}{\color{green!40!black}}{}

\begin{document}

Putting \greenverb|hurz| works

\end{document}

Bildbeschreibung hier eingeben

Wenn Sie mehrere Farben benötigen, können Sie einen allgemeinen Befehl definieren und diesen dann spezialisieren. Bitte verwenden Sie ein detaillierteres Präfix als my(Ihren Namen, eine zufällige Zeichenfolge oder was auch immer), um die Möglichkeit von Konflikten zu minimieren.

\documentclass{article}
\usepackage{xcolor}
\usepackage{newverbs}

\makeatletter % allow private control sequences
\newverbcommand{\my@colorverb}{\color{\my@verbatimcolor}}{}
\newcommand{\colorverb}[1]{\def\my@verbatimcolor{#1}\my@colorverb}
\makeatother

\newcommand{\greenverb}{\colorverb{green!40!black}}
\newcommand{\blueverb}{\colorverb{blue!80!black}}

\begin{document}

Putting \greenverb|hurz| works

Putting \blueverb|hurz| works

Putting \colorverb{red!80!black}|hurz| works

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Dies ist zwar keine wörtliche Wiedergabe, kommt dem aber ziemlich nahe. Beispielsweise ist für die Eingabe ein Klammerausgleich erforderlich.

Die Syntax entspricht der Anforderung des Benutzers: \bv....\ev. Darüber hinaus kann das wörtliche Material Zeilenumbrüche und Absatzumbrüche (Leerzeilen) enthalten.

Eine falsche Ausgabe wird beispielsweise dann erzeugt, wenn eine \bvEingabezeile mit einem einzelnen Backslash endet \. Eine weitere falsche Ausgabe entsteht, wenn die Catcode-1,2-Zeichen geändert wurden. Sie werden weiterhin als {und dargestellt }, sofern keine zusätzlichen Schritte unternommen werden.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern,tokcycle}
\tokcycleenvironment\myverb
{\addcytoks[1]{\string##1}}
{\addcytoks{\{}\processtoks{##1}\addcytoks{\}}}
{\ifx\par##1\addcytoks{\\}\else\addcytoks[1]{\string##1}\fi}
{\addcytoks[1]{\string##1}}
\makeatletter
\def\bv{\begingroup\obeylines\catcode`\%=12%
  \long\def\tokencycle##1##2##3##4{\begingroup\let\endtokencycle
  \endtokcycraw\aftertokcycle{\the\cytoks\expandafter\endgroup
  \expandafter\endgroup\expandafter\tcenvscope
  \expandafter{\the\cytoks}}\tokcycraw{##1}{##2}{##3}{##4}}%
  \myverb}
\makeatother
\let\ev\endtokcycraw
\begin{document}
\textit{here we} go:
\bv ABc. D &^$% \xyz
\ {ef}g~\\

H#I^_ \ev back t\v{o} normal \today

a
b%
c
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen