![\MakeShortVerb{\§} und \usepackage[utf8]{inputenc}](https://rvso.com/image/330816/%5CMakeShortVerb%7B%5C%C2%A7%7D%20und%20%5Cusepackage%5Butf8%5D%7Binputenc%7D.png)
Ich habe ein Buch, das vor mehr als 10 Jahren veröffentlicht wurde. Es enthält in seiner Präambel den folgenden Code:
\documentclass{article}
\usepackage[cp1251]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage[english,russian]{babel}
\usepackage{shortvrb}
\MakeShortVerb{\§}
\begin{document}
§\begin{i}§
\end{document}
Nun möchte ich die Quelldateien in Unicode konvertieren. Nach der Änderung cp1251
der Kodierung inutf8
\usepackage[utf8]{inputenc}
Die Kompilierung wurde mit einer Fehlermeldung abgebrochen, die auf ein Problem mit Folgendem hinweist \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
Wie kann dieses Problem umgangen werden?§
Es gibt nichts zu sagen, was ich weiterhin als Trennzeichen für kurze wörtliche Texte verwenden möchte .Ist shortverb
das Paket mit utf8
der Kodierung kompatibel?
Antwort1
@egreg, wieder zu schnell. Aber ich musste Mittagessen vorbereiten ...
\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}
Antwort2
Das Problem besteht darin, dass es in UTF-8 §
zwei Byte lang ist, aber \MakeShortVerb
nur eins benötigt wird.
Das Beste, was ich anbieten kann, ist Folgendes:
\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}
Die Einschränkung besteht darin, dass kein Zeichen, dem in UTF-8 das Präfix vorangestellt ist, <C2>
im wörtlichen Text erscheinen kann: Die Liste der verbotenen Zeichen lautet
¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿
das heißt, der Unicode-Bereich 00A1
– 00BF
.