Используйте `shortvrb` без необходимости завершать команду вручную

Используйте `shortvrb` без необходимости завершать команду вручную

В настоящее время с помощью 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}

введите описание изображения здесь

Связанный контент