7 Stimmen

Verwendung von Unicode in VerbatimOut von fancyvrb

Problem

VerbatimOut aus dem Paket "fancyvrb" kommt mit UTF-8-Zeichen nicht zurecht.

Minimales Arbeitsbeispiel:

\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}

\begin{document}
\begin{VerbatimOut}{\jobname.test}
é
\end{VerbatimOut}

\input{\jobname.test}
\end{document}

Fehlermeldung

Bei der Kompilierung mit pdflatex mini führt dies zu dem Fehler

Datei wurde beim Scannen beendet Verwendung von \UTFviii@three@octets .

Ein anderer Fehler tritt auf, wenn das einzige Vorkommen von é wird durch etwas anderes ersetzt, z. B. é */ :

Paket inputenc Fehler: Unicode-Zeichen \u8:### nicht für die Verwendung mit LaTeX eingerichtet ist.

- was bedeutet, dass LaTeX in diesem Fall zwar ein Multi-Byte-UTF-8-Zeichen lesen kann, aber nicht weiß, was es damit anfangen soll (d.h. es ist das falsche Zeichen).

In der Tat, wenn ich die produzierten .test Datei manuell eingeben, enthält sie das Zeichen é aber in Latin-1-Kodierung !

Prueba: Wenn ich die Dateien in einem Hex-Editor öffne, erhalte ich folgendes Ergebnis:

  • Originaldatei: C3 A9 (entspricht dem LATIN SMALL LETTER E WITH ACUTE in UTF-8)
  • Schriftliches Dossier: E9 (entspricht é in Latein-1)

Pregunta

Wie man einstellt VerbatimOut richtig eingestellt?

filecontents* (aus "filecontents") zeigt, dass es peut Arbeit. Leider verstehe ich keinen der beiden Codes, so dass ich den Code von fancyvrb nicht beheben kann, indem ich die Logik von filecontents manuell repliziere.

Ich kann auch nicht verwenden filecontents* 代わりに VerbatimOut denn ersteres funktioniert nicht innerhalb einer \newenvironment während letzteres der Fall ist.

(Oh, übrigens: Vanille Verbatim 代わりに VerbatimOut funktioniert ebenfalls wie erwartet. Der Fehler scheint beim Schreiben der Datei aufzutreten, pas beim Lesen der wortwörtlichen Eingabe)

4voto

Steve Tjoa Punkte 55411

Ist es Ihr Ziel, Symbole und Akzente in Verbatim zu schreiben? Denn das können Sie auch so machen:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
\'{e} \~{e} \`{e} \^{e}
\end{Verbatim}
\end{document}

Die Option commandchars erlaubt es, die \ { } Zeichen wie gewohnt zu arbeiten.

出典 http://ctan.mirror.garr.it/mirrors/CTAN/macros/latex/contrib/fancyvrb/fancyvrb.pdf

3voto

Charles Stewart Punkte 11393

Ist das Problem immer noch nicht gelöst? Ich werde es mir noch einmal ansehen. Was genau wollen Sie: dass Ihr Paket VerbatimOut verwendet, oder dass es nicht mit ihm interferiert?

Tests

Das Xelatex von TexLive 2009 lässt sich problemlos kompilieren. Mit pdflatex, Version

This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009)

Ich erhalte eine Fehlermeldung, die etwas nützlicher ist als die, die Sie erhalten haben:

! Argument of \UTFviii@three@octets has an extra }.

                \par 
l.8 é

? i \makeatletter\show\UTFviii@three@octets
! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.8 é

Wenn ich eine wilde Vermutung anstellen sollte, würde ich sagen, dass inputenc mit pdftex die pdftex-Primitive verwendet, um einige haarige Speicherung und Wiederherstellung von Zeichentabellen zu tun, und irgendeine Tabelle irgendwo hat einen seltenen Fehler in ihr.

Möglicherweise verwandt

Ich sah ein Beitrag von Vladimir Volovich in den Archiven der pdf-tex-Mailingliste aus dem Jahr 2003, in dem ein Konflikt zwischen inputenc und fancyvrb diskutiert wird und ein Patch zur "Lösung des Problems" veröffentlicht wird. Wer weiß, vielleicht hatte er das gleiche Problem? Es könnte sich lohnen, ihm eine E-Mail zu schicken.

2voto

andrewdotn Punkte 29643

XeTeX hat eine viel bessere Unicode-Unterstützung. Der folgende Durchlauf xelatex erzeugt "é" sowohl in \jobname.test und die PDF-Ausgabe.

\documentclass{minimal}
\usepackage{fontspec}
\tracingonline=1
\usepackage{fancyvrb}

\begin{document}
\begin{VerbatimOut}{\jobname.test}
é
\end{VerbatimOut}

\input{\jobname.test}
\end{document}

fontspec lädt die Latin Modern-Schriften, die Unicode unterstützen. Die Standard-TeX-Computer-Modern-Schriften haben nicht die richtigen Tabellen für die Unicode-Unterstützung.

Wenn Sie ein Zeichen verwenden, für das es in der aktuellen Schriftart keine Glyphe gibt, schreibt XeTeX standardmäßig ein Leerzeichen in die PDF-Datei und gibt eine Warnung im Protokoll, aber nicht auf dem Terminal aus. \tracingonline=1 gibt die Warnung auf dem Terminal aus.

2voto

Alex Punkte 1521

Sur http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.LiterateAgda schlagen sie vor, dass Sie Folgendes verwenden sollten

\usepackage{ucs}
\usepackage[utf8x]{inputenc}

in der Preabmle. Ich habe dies erfolgreich genutzt, um Unicode in eine Verbatim-Umgebung einzufügen.

1voto

Alan Punkte 11
\documentclass{article}

\usepackage{fancyvrb}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\newenvironment{MonVerbatim}{%
\count0=128\relax %
\loop
   \catcode\count0=11\relax
   \advance\count0 by 1\relax 
   \ifnum\count0<256
   \repeat
   \VerbatimOut[commandchars=\\\{\}]{VerbatimText.tex}%
}{\endVerbatimOut}

\newcommand\test{A command producing accented characters éà}

\begin{document}
\begin{MonVerbatim}
     A little bit text in verbatim mode éà_].
     \test
\end{MonVerbatim}
Followed by some accented character éà.
\end{document}

Dieser Code funktioniert bei mir mit TeXLive 2018 und pdflatex. Ihr solltet wahrscheinlich vermeiden, catcode zu ändern, wenn Sie ein 16-Bit-TeX (lualatex oder xelatex) verwenden.

Sie können das Paket "iftex" verwenden, um die verwendete Tex-Engine zu überprüfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X