О кавычкерах

В данной заметке под словом «кавычкер» понимается скрипт, расставляющий не только правильные кавычки, но и неразрывные пробелы, тире, знаки копирайта и зарегистрированного товарного знака, другие символы.

Какая задача стоит перед кавычкером?

  • для человека, который не может или не хочет написать текст правильно (в плане типографики), сделать это автоматически или
  • для человека, который может и хочет написать текст правильно, помочь сделать это быстрее?

Раньше я не задумывался над этим вопросом, и как-то подсознательно, видимо, считал, что первое. А как только задумался, понял, что правильный ответ — второй. Если человек пишет коряво, то никакая автоматика ему не поможет. А вот если человек пишет аккуратно, то автоматика может и помешать, когда сработает неправильно. Исходя из этого нужно делать кавычкеры, во-первых, как можно более предсказуемыми, а во-вторых, как можно меньше мешающими тому, кто без них знает. (То же относится и к викиформаттерам, но сейчас не о них.)

Например. Как мы знаем, между числами пишется тире, если это диапазон («Война шла в 1941—1945 годах»), и дефис — если величина указана приблизительно («С Али-Бабой было 41-45 разбойников»). Сейчас кавычкер e2 «Helicon» использует хитрую эвристику для того, чтобы указывать диапазон лет правильно:

// 1941-1945
$text = preg_replace ('#(\d{4})-(\d{4})#is', '\\1—\\2', $text);

К сожалению, года бывают не только четырёхзначными, четырёхзначными бывают не только года, года не всегда означают диапазон и диапазон бывает не только лет («Война шла в 41—45 годах XX века»). Поэтому эта штука, конечно, несколько повышает вероятность правильного типографирования текста, однако резко снижает предсказуемость кавычкера и мешает тому, кто хочет сделать иначе, сделать так, как он хочет. Начиная с версии 1.15 Helicon больше не занимается этой ерундой, но с e2 пока что поставляется старый Helicon версии 1.11 (смайлик).

К чему я это всё? К тому, что хороший кавычкер должен:

  • автоматически заменять одни символы на другие только тогда, когда есть 100% уверенность в том, что автор имел в виду именно тот символ, на который мы заменяем;
  • дать возможность автору вставить тот символ, который он хочет, наиболее простым и однозначным способом.

Если продолжить тему дефисов и тире, то вот какие правила типографирования я считал бы разумными (вспомним так же и про знак минус).

Существует два случая, когда мы можем точно сказать, что пользователь имел в виду тире:

  • с двух сторон от дефиса находится пробелы или неразрывные пробелы;
  • перед дефисом находится начало строки или всего текста (прямая речь).

В этих случаях мы заменяем дефис на тире (mdash), и, если перед ним был пробел, то заменяем этот пробел на неразрывный пробел.

В случаях неоднозначности дефис остаётся самим собой, два дефиса подряд заменяются на минус, а три — на тире. Например:

Иван Петрович родился где-то в 1925-1928 г. Иван Петрович родился где-то в 1925-1928 г.
Математики заявляют, что 1991—1917=74 Математики заявляют, что 1991—1917=74
Война шла в 1941—-1945 годах Война шла в 1941—1945 годах

В исходном тексте может встретиться ещё и «короткое тире» (его любит вставлять Word; но насколько мне известно в русском языке такого знака не существует). Его нужно, как я понимаю, просто заменить на длинное, так как ничего другого под ним Word подразумевать не мог.

Как видим, при таком подходе автор будет точно знать, что получит на выходе, так как тире ставится автоматически только там, где его необходимость абсолютно однозначна. Никаких сюрпризов.

Примерно так же можно формализовать и правила расстановки кавычек. Главное избавиться от всякой эвристики типа «пользователь наверняка имел в виду то-то».

Если во всём тексте встречается только одна двойная кавычка сразу после числа, то можно с большой уверенностью утверждать, что имелся в виду знак дюйма. Утверждать-то можно, но кавычку нужно заменять на закрывающую, так как она написана слитно с предшествующим текстом и раздельно с последующим. А для знаков фута и дюйма (минуты и секунды) использовать, скажем, одну и две одинарных кавычки подряд соответственно.

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

Что думаете?

Дальше
10 комментариев
Oleg 2006

Нужно еще сделать так: при попытке написать тире/дефис так, как программе не 100% понятно, должен выпадать мерцающий квадратик с  восклицательным знаком, из которого выпадает меню такого содержания:
||Неопознанное тире или дефис||
||Вставить тире||
||Вставить дефис||
||Вставить минус||
||Параметры автозамены||
||Справка по этой функции||

Из последнего пункта вылезает скрепка и предлагает закачать через Windows Update нового персонажа-подсказку под названием «Медвед-Превед».

А если серьезно, непредсказуемое поведение — это грех, полностью согласен. Пусть, все, что делает программа будет ожидаемо и к месту. И жить станет приятней.

Илья Бирман

Боже, я сначала подумал, что вы серьёзно ;-)

jay 2006

за медведа-скрепку зачёт.

AG 2006

Вот ведь придумают люди себе проблем...
Использовать нужно везде один знак: -.
А кавычки только такие: «„.
Keep it simple!

Илья Бирман

можно еще запятые не ставить и ваще никакие знаки и вобщем тоже понятно че написать хотел. без проблем!

AG 2006

Тупой скрипт! Я имел в виду такие: ’’ПРЕВЕД!’’

Oleg 2006

2 AG: и печатать текст гарнитурой Fixed System на экране 80x25 знаков.

Илья Бирман

Точно :-)

Amix 2006

Любопытная заметка. Но у меня есть некоторые сопения в адрес предлагаемого в ней решения.

  1. В большинстве текстов тире встречается намного чаще минуса, посему было бы логичнее оставить %%—%% именно для тире: получили бы минимум лишних знаков.
  2. Использование тройного дефиса чревато несовместимостью с разными wiki-разметками, где такая комбинация может означать и разрыв строки, и горизонтальную линию, и что угодно еще.
  3. Описанная в заметке схема предполагает хорошую поддержку русской типографики, но как насчет других языков? И, между прочим, возьмем тяжелый частный случай:
  4. Как насчет смешения различных языков в одном тексте? Конечно, в идеале достаточно обозначить язык в теге, а браузер сам применит необходимые правила (скажем, для кавычек: «текст» в русском, “text” в английском, « text » во французском и т. д.), но пока таких браузеров что-то не видно. Как же разграничить языки для типографики в нынешних условиях? Есть ли какие-то идеи на сей счет?
Илья Бирман
  1. Долго думал над этим, именно это вызывает у меня больше всего сомнений в моём варианте. Проблема в том, что, а как тогда вставить минус?
  2. Хороший аргумент, не подумал об этом.
  3. Я не решаю задачу правильного типографирования всех языков мира.
  4. Правила типографики определяются не языком конкретного отрывка текста, а языком издания. When I cite someone saying «Surprise» (a bear, for example), I use Russian-style quotation marks. На мой взгляд, применять разные правила типографики в одном издании — ужасная корявость.

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

Amix 2006
  1. Тоже пока не представляю... возможно, подойдет комбинация каких-то подходов: скажем, -2C явно может превратиться только в %%−2°C%%; а вот случай с %%a-b, 1-2, a — b%% неоднозначен. Я бы обрамил сие в теги, явно указывающие на конкретную дополнительную интерпретацию: скажем, %%[math] a — b [/math]%% (в этом контексте никаких тире быть не может).
  1. Зачем же всех? Достаточно нескольких европейских, ибо правила типографики различаются не очень сильно. Зато убьем сразу целую кучу зайцев.
  2. А если цитируется абзац или несколько — разве будет красиво не соблюдать «родные» правила? А если издание двуязычное? Впрочем, я уже понял, что вам это не интересно.
Илья Бирман
  1. Думал об этом, но коряво же...
  2. Давайте хотя бы одного убьём для начала
  3. Если моё мнение по какой-то теме не совпадает с вашим, это не значит, что тема мне не интересна. Даже если цитируется не абзац, и не несколько, — а целый рассказ на английском языке я решу у себя опубликовать, кавычить я его буду по-русски. Ещё раз, на мой взгляд, правила должны быть едины для издания, а не для каких-то его кусков. Что такое «двуязычное издание»? Если издание в принципе бывает на разных языках, то можно считать это несколькими изданиями и в каждом из них применять соответствующие правила. Кавычить один абзац так, а другой иначе — бред.
Amix 2006
  1. Да.
  2. Пожалуйста.
  3. Почему же «бред»? Я понял вашу позицию, она мне не кажется экзотической. Я согласен с тем, что она вполне применима. Но ваше категорическое неприятие иных вариантов несколько удивляет.

Под «двуязычным изданием» подразумевалось не «издание, которое бывает на двух языках», а издание, которое содержит чередующиеся тексты на разных языках. Было бы забавно посмотреть, как большая русскоязычная статья смотрелась бы, скажем, с французской пунктуацией. А если пунктуация должна быть едина, то алфавит, конечно, тоже. Да и язык, в конце концов. Да здравствуют предприятия «АйБиЭм» и «Сан Майкросистемз»... вернее, пардон, «ИБМ» и «Маленькие Солнечные Системы». Это абсурд (или не совсем?), и он тоже имеет право на существование. Причем несложно найти подобные примеры стремления к единству в советской литературе и периодике. Просто несколько шагов вперед от единства пунктуации. Потихоньку мы движемся к более свободному смешению языков в тексте. Почему бы не «освободить» и пунктуацию?

Илья Бирман

Мне кажется, вы перегибаете палку.

Во-первых, что бы вы не говорили, двуязычных изданий я не представляю. Всё равно у самого издания должен быть какой-то язык. На каком языке выходные данные написаны? Во-вторых, ну допустим нашли вы где-то такую удивительную вещь, как двуязычное издание. Хорошо, применяйте в нём удивительные правила типографики. И только в нём. В нормальных изданиях, коие составляют абсолютное большинство (а моём мире — дак и вовсе 100%, т. к. двуязычных я не встречал), используйте нормальные правила.

По поводу алфавита и пунктуации. Не путайте пунктуацию и типографику. Одно является вопросом языка, а другое — вопросом национальных традиций.

А при чём тут ИБМ я вообще не понял.

Splurov 2006

Я считаю, что мы не должны заставлять наборщика текста расставлять два, три дефиса (особенно это касается комментариев, где комментаторы просто не будут знать о таких возможностях (или не будут хотеть использовать)). Я согласен, что другого выхода особо и нету, но:
1) Неужели нашей целью стоит правильно «оттипографить» текст до единого символа? Ничего страшного не вижу в том, чтобы в чём-то мы ошиблись. В крайнем случае корректор (зачастую сам автор текста) должен иметь возможность в ручную исправить/доработать типографику.
2) Анализировать текст. Сложно, но возможно. Например, при использовании минуса, почти всегда, где-то рядом в тексте мы встретим тире. Или: «Иван Петрович родился где-то в 1925-1928 г.» почти всегда встретим «где-то», «приблизительно», «около» и прочее...

Splurov 2006

В предыдущем комментарии немного описался. Имелось ввиду:
...где-то рядом в тексте мы встретим тире равно...

Мои книги