VerbatimOut
от “fancyvrb” пакета не играет приятно с символами UTF-8.
\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{\jobname.test}
é
\end{VerbatimOut}
\input{\jobname.test}
\end{document}
Когда скомпилировано с помощью pdflatex mini
, это дает ошибку
Файл, законченный при сканировании использования
\UTFviii@three@octets
.
Другая ошибка происходит когда единственное возникновение é
выше заменяется чем-то еще, например. é */
:
Пакет inputenc Ошибка: символ Unicode
\u8:###
не настроенный для использования с ЛАТЕКСОМ.
– указание, что в этом случае, ЛАТЕКС преуспевает в том, чтобы читать многобайтовый символ UTF-8, но не знать, что сделать с ним (т.е. это - неправильный символ).
На самом деле, когда я открываю произведенный .test
зарегистрируйте вручную, это содержит символ é
, но в латинском 1 кодировании!
Доказательство: когда я открываю файлы в Hex-редакторе, я получаю следующее:
C3 A9
(соответствует ЛАТИНСКОЙ СТРОЧНОЙ БУКВЕ E С ОСТРЫМ в UTF-8),E9
(соответствует é
на латыни 1)Как установить VerbatimOut
правильно?
filecontents*
(от “filecontents”), показывает, что он может работать. К сожалению, я не понимаю ни один код, таким образом, я не могу исправить код fancyvrb путем тиражирования логики от filecontents вручную.
Я также не могу использовать filecontents*
вместо VerbatimOut
потому что первый не работает в a \newenvironment
, в то время как последний делает.
(О, между прочим: ваниль Verbatim
вместо VerbatimOut
также работы как ожидалось. Ошибка, кажется, происходит при записи файла, не при чтении дословного входа),
- это ваша конечная цель написать символы и акценты в Verbatim? Поскольку вы можете сделать это, как это:
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
\'{e} \~{e} \`{e} \^{e}
\end{Verbatim}
\end{document}
Параметр CommandChars позволяет работать \
{
}
символы для работы, как они нормально будут.
Источник: http://ctan.mirror.garr.it/mirrors/ctan/macros/latex/contrib/fancyvrb/fancyvrb.pdf
Это все еще неизвестен? Я сделаю другой взгляд. Что именно вы хотите: ваша посылка использовать VerbatImout или для него не мешать ему?
Тесты
Texlive 2009's xelatex компилирует нормально. С помощью pdflatex, версия
Это PDFTEX, версия 3.1415926-1.40.10 (Tex Live 2009)
Я получаю сообщение об ошибке, которое скорее более полезное сообщение об ошибке, чем у вас:
! 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 é
, если я должен был сделать Дикое предположение, я бы сказал, что в Incapeenc с PDFTEX использует примитивы PDFTEX, чтобы сделать волосатое хранение и восстановление таблиц символов, а в некоторых таблицах где-то есть редкая ошибка.
Возможно, связано
Я видел пост Владимира Воловиче в архивах PDF-Tex Mailing List, вплоть до 2003 года, в котором обсуждается конфликт между Incapeenc & FancyVRB, а также публикует патч решить проблему". Кто знает, может быть, он столкнулся с той же проблемой? Это может стоить отправлять по электронной почте.
Я думаю, что один из них к тому, что один из них - это тот, что недоступенчатый код, скорее всего, ошибка, а JLS пытается защитить вас от таких ошибок.
Разрешение , если (true) return;
- это хороший способ работать вокруг ограничения JLS, если вы действительно хотите сделать это специально. Если JLS остановила это, это будет мешать. Кроме того, он также должен останавливаться:
public static boolean DEBUG = true; //In some global class somewhere else
...
if (DEBUG) return; //in a completely unrelated class.
...
, потому что константа отладки полностью включена, и функционально эквивалентно просто набрать истину в том, что если условие. Из JLS перспективы эти два случая очень похожи.
-121--1020440- XETEX имеет гораздо лучшую поддержку Unicode. Следующие пробеги через XELATEX
производит «é» как в \ jobname.test
и выходной PDF.
\documentclass{minimal}
\usepackage{fontspec}
\tracingonline=1
\usepackage{fancyvrb}
\begin{document}
\begin{VerbatimOut}{\jobname.test}
é
\end{VerbatimOut}
\input{\jobname.test}
\end{document}
FontSpec
загружает латинские современные шрифты, которые имеют поддержку Unicode. Стандартный компьютерный компьютер современные шрифты не имеют правильных таблиц для поддержки Unicode.
Если вы используете символ, который не имеет глифа в текущем шрифте, по умолчанию Xetex записывает пробел в PDF и печатает предупреждение в журнале, но не на терминале. \ Tranceonline = 1
печатает предупреждение к терминалу.