Цитаты игнорируются pdftex

Цитаты игнорируются pdftex

Я читаю TeXBook Дональда Кнута, упражнение 2.1. У меня есть следующие входные данные:

Alice said, ‘‘I always use an en-dash instead of a hyphen when specifying page numbers like ‘480--491’ in a bibliog
raphy.’’
\bye

Компиляция с использованием pdftex sample.texдает следующий вывод. Короткое тире работает, но куда делись кавычки?

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

решение1

Вместо фигурных кавычек ‘‘используйте

``I always use an en-dash instead of a hyphen when specifying page numbers
like `480--491' in a.''
\bye

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

решение2

Если вы посмотрите на исходный код TeXbook, которыйдоступно на CTAN, Понимаете

\exercise Explain how to type the following sentence to \TeX: Alice said,
``I always use an en-dash instead of a hyphen when specifying page numbers
like `480--491' in a ^{bibliography}.''
\answer |Alice said, ``I always use an en-dash instead of a hyphen when|\break
|specifying page numbers like `480--491' in a bibliography.''| \
(The wrong answer to this question ends with |'480-49l' in a bibliography."|)

Если вы скомпилируете с pdftexкодом

Alice said, ``I always use an en-dash instead of a hyphen when specifying
page numbers like `480--491' in a bibliography.''
\bye

затем скопируйте и вставьте из PDF, вы получите

Элис сказала: «Я всегда использую короткое тире вместо дефиса при указании номеров страниц, например «480–491» в библиографии».

потому что программы для чтения PDF-файлов достаточно умны.

Однако не следует использовать ‘‘и ’’, поскольку символы в фрагментах кода в TeXbook на самом деле обозначают

`` ''

Помните, что TeX использует только семибитные символы ASCII, тогда как и не входят в этот диапазон ни в одной кодировке.

решение3

Когда TeX иTeXbookбыли написаны, компьютеры и программное обеспечение отличались от современных по двум параметрам:

  1. В каждом компьютере/ОС было меньше символов (обычно не более 256), чем весь диапазон Unicode, доступный сегодня; в частности, введенные вами фигурные кавычки, а именно ' (U+2018 ЛЕВАЯ ОДИНАРНАЯ КАВЫЧКА) и ' (U+2019 ПРАВАЯ ОДИНАРНАЯ КАВЫЧКА), не были в их наборах символов,

  2. Вместо этого некоторые системы, включая те, с которыми был знаком Кнут, использовали позиции, которые в настоящее время занимают ` (U+0060 ГРАВ АКЦЕНТ) и ' (U+0027 АПОСТРОФ) для символов, которые раньше выглядели визуально симметрично и служили той же цели. Эта история хорошо объяснена на страницеКавычки ASCII и UnicodeМаркуса Куна (прокрутите вниз до раздела «Проблема»), а также впакет upquote.

Соответственно, результат таков:

  1. Если вы введете в TeX символы, не входящие в ASCII, он их неправильно поймет и (серьезный недостаток дизайна, на мой взгляд) даже не пожалуется громко: вам придется заглянуть в файл .log. Чтобы избежать этого по ошибке,

    • Поместите \tracinglostchars=2в начало всех файлов (и используйте движок на основе eTeX; тот, который pdftexвы используете, подойдет) и/или

    • Всегда смотрите в .logфайл, когда TeX говорит: «(дополнительную информацию см. в файле расшифровки)».

  2. Когда вы видите что-то похожее на фигурные кавычки вTeXbook, вы должны понимать это (и вводить это) как ` и ', хотя это явно неправильно согласно Unicode и современным шрифтам — относитесь к этому как к особенности этих шрифтов.

Бонус: если вы просто хотите использовать символы Unicode и не заморачиваться со старыми хаками для достижения таких вещей, как двойные кавычки и короткие тире с помощью лигатур символов ASCII, вы можете использовать движок Unicode, такой как XeTeX или LuaTeX. Вот файл, который подходит для примера здесь; скомпилируйте с помощью xetexили luatex:

\tracinglostchars=2
% \input luaotfload.sty % Uncomment this line if using LuaTeX
\font\tenrm="[lmroman10-regular]" at 10pt
\rm
Alice said, “I always use an en-dash instead of a hyphen when specifying 
page numbers like ‘480–491’ in a bibliography.”
\bye

(Разумеется, тогда вам придется не забыть использовать короткое тире вместо дефиса, а также при редактировании входного файла использовать шрифт, в котором вы легко заметите разницу.)

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