Derzeit shortvrb
ist es mit möglich, ein einzelnes Zeichen so zu definieren, dass es allein einen Inline-Verbatim-Befehl startet:
\documentclass{article}
\usepackage{shortvrb}
\begin{document}
\MakeShortVerb{\|}
foo |this is verbatim|
\end{document}
oder ähnlich mit fancyvrb
,
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\DefineShortVerb{\|}
foo |this is verbatim|
\end{document}
In beiden Fällen \verb!some verbatim text!
wird – wie bei – das Symbol erneut benötigt, um den Wortteil zu beenden. Wenn es weggelassen wird, entsteht ein Fehler ähnlich wie „\verb beendet durch Zeilenende“.
Gibt es eine Möglichkeit, dies (neu) zu definieren \MakeShortVerb
oder ähnliches, sodass die neue Zeile lediglich den Befehl beendet, anstatt einen Fehler zu erzeugen? Idealerweise könnte man dann etwas wie Folgendes schreiben:
\DefineAsymmetricVerb{\|}
This is some regular text.
Now some verbatim code that only needs a symbol at the start of the line, like:
| if 1 == 1
| print 'All is well'
Dies würde Blöcke (oder einzelne Zeilen) von wörtlichem Text ermöglichen, ohne die Unordnung von
| if 1 == 1 |
| print 'All is well' |
oder
\begin{verbatim}
if 1 == 1
print 'All is well'
\end{verbatim}
Antwort1
Sie können, aber Sie sollten nicht.
\documentclass{article}
\makeatletter
\catcode`|=\active
\def|{%
\par
\begingroup
\parindent\z@\mbox{}%
\owj@eol\catcode`\^^M=\active
\let\do\@makeother\dospecials
\verbatim@font\@noligs
\@vobeyspaces\frenchspacing
}
\def\owj@par{\par\endgroup}
\begingroup\lccode`~=`\^^M\lowercase{\endgroup
\def\owj@eol{\let~\owj@par}
}
\makeatother
\begin{document}
This is some regular text.
Now some verbatim code that only needs a symbol at the start of the line, like:
| if 1 == 1
| print 'All is well'
|
| else
| error
| fi
\noindent This is some regular text
\end{document}