Я читаю 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
решение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были написаны, компьютеры и программное обеспечение отличались от современных по двум параметрам:
В каждом компьютере/ОС было меньше символов (обычно не более 256), чем весь диапазон Unicode, доступный сегодня; в частности, введенные вами фигурные кавычки, а именно ' (U+2018 ЛЕВАЯ ОДИНАРНАЯ КАВЫЧКА) и ' (U+2019 ПРАВАЯ ОДИНАРНАЯ КАВЫЧКА), не были в их наборах символов,
Вместо этого некоторые системы, включая те, с которыми был знаком Кнут, использовали позиции, которые в настоящее время занимают ` (U+0060 ГРАВ АКЦЕНТ) и ' (U+0027 АПОСТРОФ) для символов, которые раньше выглядели визуально симметрично и служили той же цели. Эта история хорошо объяснена на страницеКавычки ASCII и UnicodeМаркуса Куна (прокрутите вниз до раздела «Проблема»), а также впакет upquote.
Соответственно, результат таков:
Если вы введете в TeX символы, не входящие в ASCII, он их неправильно поймет и (серьезный недостаток дизайна, на мой взгляд) даже не пожалуется громко: вам придется заглянуть в файл
.log
. Чтобы избежать этого по ошибке,Поместите
\tracinglostchars=2
в начало всех файлов (и используйте движок на основе eTeX; тот, которыйpdftex
вы используете, подойдет) и/илиВсегда смотрите в
.log
файл, когда TeX говорит: «(дополнительную информацию см. в файле расшифровки)».
Когда вы видите что-то похожее на фигурные кавычки в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
(Разумеется, тогда вам придется не забыть использовать короткое тире вместо дефиса, а также при редактировании входного файла использовать шрифт, в котором вы легко заметите разницу.)