В настоящее время с помощью shortvrb
можно определить один символ, который будет начинать встроенную дословную команду:
\documentclass{article}
\usepackage{shortvrb}
\begin{document}
\MakeShortVerb{\|}
foo |this is verbatim|
\end{document}
или аналогично, с fancyvrb
,
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\DefineShortVerb{\|}
foo |this is verbatim|
\end{document}
В обоих случаях — как и в случае \verb!some verbatim text!
— символ снова требуется для завершения дословной части. Если его пропустить, возникнет ошибка, похожая на "\verb ended by end of line".
Есть ли способ (пере)определить \MakeShortVerb
или что-то подобное, чтобы новая строка просто завершала команду, а не вызывала ошибку? В идеале можно было бы написать что-то вроде:
\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'
Это позволило бы размещать блоки (или отдельные строки) дословного текста без помех
| if 1 == 1 |
| print 'All is well' |
или
\begin{verbatim}
if 1 == 1
print 'All is well'
\end{verbatim}
решение1
Можно, но не следует.
\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}