Арабские цифры — в римские, и наоборот
В русском языке римские цифры используются в следующих случаях:
- номер века или тысячелетия: XIX век, II тысячелетие до н. э.;
- порядковый номер монарха: Карл V, Екатерина II;
- номер тома в многотомной книге (иногда — номера частей книги, разделов или глав);
- В некоторых изданиях — номера листов с предисловием к книге, чтобы не исправлять ссылки внутри основного текста при изменении предисловия;
- Иные важные события или пункты списка, например: V постулат Евклида, II мировая война, XXII съезд КПСС и т. п.
Римские цифры в нашей типографике принято набирать прописными.
Иногда приходится исправлять ошибки набора и вместо арабских цифр ставить римские. Немного облегчить эту задачу поможет приведенный ниже скрипт, найденный на японском сайте и адаптированный мной к нашим условиям. Максимальное число, которое можно преобразовать скриптом — это 4999, хотя традиционно римские цифры предоставляют возможность записывать числа натурального ряда от 1 до 3999 (см. материал в Википедии). Нуля, как такового, в римских цифрах нет.
Для преобразования необходимо выделить арабское число (или цифру) и запустить скрипт. Не было бы лишним в этой ситуации и создание клавиатурного сокращения для вызова скрипта.
Скрипт будет работать в InDesign CS3 | Windows, Mac, а возможно и в более старших и младших версиях Индизайна.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | //arabic2roman //An InDesign CS3 JavaScript // Скрипт переводит арабские числа в римские // (c) Kenshi Muto, kmuto@debian.org (адаптация Б. Кащев) main(); function main() { if (app.documents.length == 0) { alert ("Документ не открыт. Откройте вначале документ"); return; } if(app.selection.length == 1 && (app.selection[0].constructor.name == "Word" || app.selection[0].constructor.name =="Character")) { app.selection[0].contents = arabic2roman(app.selection[0].contents); } else { alert("Выделите цифру или целое число от 1 до 4999 и попытайтесь снова"); return; } } // main() function arabic2roman(s) { var n = parseInt(s); var v = ""; var i = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; var x = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"]; var c = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"]; var m = ["", "M", "MM", "MMM", "MMMM"]; if (n >= 1 && n < = 4999) { v += m[Math.floor(n / 1000)]; n %= 1000; v += c[Math.floor(n / 100)]; n %= 100; v += x[Math.floor(n / 10)]; n %= 10; v+= i[n]; } return v; } |
Чтобы полностью раскрыть данную тему приведем скрипт обратного преобразования римских чисел в арабские. Скрипт написан тем же японским автором и пользоваться им точно так же.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | //roman2arabic //An InDesign CS3 JavaScript // Скрипт переводит римские числа в арабские. // (c) Kenshi Muto, kmuto@debian.org (адаптация Б. Кащев) main(); function main() { if (app.documents.length == 0) { alert ("Документ не открыт. Откройте вначале документ"); return; } if(app.selection.length == 1 && (app.selection[0].constructor.name == "Word" || app.selection[0].constructor.name =="Character")) { var myArabic = roman2arabic(app.selection[0].contents); app.selection[0].contents = myArabic.toString(); } else { alert("Выделите римское число или цифру и попытайтесь снова"); return; } } // main() function roman2arabic(s) { var i = 0; var v = 0; var n, c; s = s.toLowerCase(); if (s.charAt(i) == "m") { for (n = 0; s.charAt(i) == "m"; n++) i++; if (n > 4) return 0; v += n * 1000; } if (s.charAt(i) == "d" || s.charAt(i) == "c") { if ((c = s.charAt(i)) == "d") { i++; v += 500; } if (c == "c" && s.charAt(i + 1) == "m") { i += 2; v += 900; } else if (c == "c" && s.charAt(i + 1) == "d") { i += 2; v += 400; } else { for (n = 0; s.charAt(i) == "c"; n++) i++; if (n > 4) return 0; v += n * 100; } } if (s.charAt(i) == "l" || s.charAt(i) == "x") { if ((c = s.charAt(i)) == "l") { i++; v += 50; } if (c == "x" && s.charAt(i + 1) == "c") { i += 2; v += 90; } else if (c == "x" && s.charAt(i + 1) == "l") { i += 2; v += 40; } else { for (n = 0; s.charAt(i) == "x"; n++) i++; if (n > 4) return 0; v += n * 10; } } if (s.charAt(i) == "v" || s.charAt(i) == "i") { if ((c = s.charAt(i)) == "v") { i++; v += 5; } if (c == "i" && s.charAt(i + 1) == "x") { i += 2; v += 9; } else if (c == "i" && s.charAt(i + 1) == "v") { i += 2; v += 4; } else { for (n = 0; s.charAt(i) == "i"; n++) i++; if (n > 4) return 0; v += n; } } return (s.charAt(i) == "" && v >= 1 && v < = 4999) ? v : 0; } |
Ссылка на вышеупомянутый японский сайт
В Стране Восходящего Солнца проблема римских цифр стоит особенно остро:))
Взял, пригодится!!!