Используя Unicode в VerbatimOut fancyvrb

Проблема

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 также работы как ожидалось. Ошибка, кажется, происходит при записи файла, не при чтении дословного входа),

7
задан Konrad Rudolph 10 June 2010 в 09:23
поделиться

3 ответа

- это ваша конечная цель написать символы и акценты в 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

4
ответ дан 6 December 2019 в 21:13
поделиться

Это все еще неизвестен? Я сделаю другой взгляд. Что именно вы хотите: ваша посылка использовать 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, а также публикует патч решить проблему". Кто знает, может быть, он столкнулся с той же проблемой? Это может стоить отправлять по электронной почте.

3
ответ дан 6 December 2019 в 21:13
поделиться

Я думаю, что один из них к тому, что один из них - это тот, что недоступенчатый код, скорее всего, ошибка, а 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 печатает предупреждение к терминалу.

2
ответ дан 6 December 2019 в 21:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: