\MakeShortVerb{\§} и \usepackage[utf8]{inputenc}

\MakeShortVerb{\§} и \usepackage[utf8]{inputenc}

У меня есть книга, изданная более 10 лет назад. В ее преамбуле содержится следующий код:

\documentclass{article}

\usepackage[cp1251]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[english,russian]{babel}

\usepackage{shortvrb}
\MakeShortVerb{\§}

\begin{document}
§\begin{i}§
\end{document} 

Теперь я хочу конвертировать исходные файлы в юникод. Однако после изменения cp1251кодировки наutf8

\usepackage[utf8]{inputenc}

компиляция остановлена ​​с сообщением об ошибке, указывающим на проблему с \MakeShortVerb{\§}:

! Missing \endcsname inserted.
<to be read again> 
                   \protect 
l.8 \MakeShortVerb{\В§}

? h
The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

? h
Sorry, I already gave what help I could...
Maybe you should try asking a human?
An error might have occurred before I noticed any problems.
``If all else fails, read the instructions.''

? 

! Package inputenc Error: Keyboard character used is undefined
(inputenc)                in inputencoding `utf8'.

See the inputenc package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.8 \MakeShortVerb{\В§}

? r

Как обойти эту проблему?Ничего такого, что я хотел бы использовать §в качестве разделителей для короткого дословного текста.Совместим ли shortverbпакет с utf8кодировкой?

решение1

@egreg опять слишком быстро. Но у меня был обед, который нужно было подготовить...

\documentclass{article}

\usepackage[T1,T2A]{fontenc}
\usepackage[english,russian]{babel}

\usepackage[utf8]{inputenc}

%\usepackage{shortvrb}

\makeatletter
\DeclareUnicodeCharacter{00A7}{\IgorSVerb}
\def\IgorSVerb{\begingroup\def\IgorSVerb{\verb@egroup\endgroup}\verb^^a7}
\makeatother


\begin{document}
Hello

§\begin{i}$&^\}{"'çÂ\]%§

§\begin{i}$&^\}{"'çÂ\]%§

\selectlanguage{english}

§\begin{i}$&^\}{"'çÂ\]%§

§\begin{i}$&^\}{"'çÂ\]%§<

\end{document} 

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

решение2

Проблема в том, что в UTF-8 §длина составляет два байта, а \MakeShortVerbтребуется только один.

Лучшее, что я могу предложить, это следующее:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[english,russian]{babel}

\begingroup\uccode`~="C2 \uppercase{\endgroup
\DeclareUnicodeCharacter{00A7}{\verb~}}
\begingroup\uccode`~="A7 \uppercase{\endgroup\def~}{}

\begin{document}

§\begin{i}§

§{-{\§

\end{document}

Ограничение заключается в том, что ни один символ, который в UTF-8 имеет префикс , не <C2>может появляться в дословном тексте: список запрещенных символов

¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿

то есть диапазон Unicode 00A100BF.

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

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