Напишите издательское правило вёрстки для заголовка внизу страницы. Заголовок раздела остаётся на странице, если под ним остаётся не меньше 2 строк, а заголовок главы всегда начинается с новой страницы. Проверьте ответы для 2 строк, 1 строки и заголовка главы.
Примеры можно выполнить в Песочнице. Для терминала установите Native или npm по уроку Первая программа.
Напишите и запустите правило
Сохраните всю программу в файле house-style.lspx.
(define (место-заголовка осталось-строк заголовок-главы?)
(if (and (>= осталось-строк 2) (not заголовок-главы?))
'(решение оставить)
'(решение перенести)))
(место-заголовка 5 #f)Если Native или npm уже установлен, выполните команду из каталога с файлом.
lispex house-style.lspxВывод
(решение оставить)Команда завершается с кодом 0 и не создаёт файлов.
В Песочнице вставьте и запустите ту же программу, чтобы получить тот же ответ.
Два аргумента описывают заголовок.
осталось-строкозначает число строк, оставшихся на странице под заголовком.заголовок-главы?равно#tдля заголовка главы и#fдля заголовка раздела.
Пример ожидает корректное неотрицательное число строк и логическое значение. Вызывающее приложение проверяет входные данные перед вызовом правила. Об ошибочных данных читайте в Обработке ошибок.
Пяти строк хватает для текста под заголовком, а #f означает заголовок раздела.
Ответ представляет собой список. Символ оставить в нём сообщает приложению, что заголовок остаётся на этой странице.
Проверьте 2 строки и 1 строку
Оставьте определение в house-style.lspx.
Замените последний вызов списком из трёх вызовов.
(list (место-заголовка 2 #f)
(место-заголовка 1 #f)
(место-заголовка 5 #t))Снова выполните lispex house-style.lspx или запустите обновлённую программу в Песочнице.
Вывод
((решение оставить) (решение перенести) (решение перенести))Команда снова завершается с кодом 0 и не создаёт файлов.
Читайте ответы в порядке вызовов.
| Случай | Причина ответа | Решение |
|---|---|---|
| 2 строки, заголовок раздела | >= включает 2 | оставить |
| 1 строка, заголовок раздела | 1 меньше 2 | перенести |
| 5 строк, заголовок главы | (not заголовок-главы?) ложно | перенести |
Если заменить >= на >, правило перенесёт заголовок и при 2 строках.
Этот случай показывает, включено ли граничное значение.
Правило использует перенести для обеих причин переноса.
Чтобы различать нехватку места и заголовок главы, добавьте отдельные ветви и метки причин.
Как условия выбирают ответ
Сначала and проверяет (>= осталось-строк 2). Если условие ложно, вычисление and останавливается.
Иначе оно проверяет (not заголовок-главы?). Форма if вычисляет только выбранную ветвь.
Апостроф сохраняет выбранный список решения как данные.
Приложение для вёрстки считает осталось-строк, пока раскладывает страницу, затем передаёт это число правилу.
При одинаковых двух значениях и одинаковых заданных условиях выполнения это правило даёт одинаковый результат.
Редакторы издательства задают правила вёрстки и проверяют правило. Приложение проверяет происхождение входных данных и решает, применять ли ответ к странице.
Упражнение
Оставляйте заголовок раздела на странице, только если под ним остаётся не меньше 3 строк. Проверьте наименьшее число строк, при котором заголовок остаётся, и наибольшее, при котором он переносится.
Показать один ответ
В house-style.lspx замените (>= осталось-строк 2) на (>= осталось-строк 3).
Замените последний список вызовов следующим.
(list (место-заголовка 3 #f)
(место-заголовка 2 #f))Снова выполните lispex house-style.lspx.
Вывод
((решение оставить) (решение перенести))Команда завершается с кодом 0 и не создаёт файлов.
Выберите, где запускать программу дальше
Когда сможете объяснить ответы для 2 строк и 1 строки, переходите к уроку Лиспекс в вашем приложении.
Для других задач выберите руководство.
- Подробнее о чтении программы читайте в разделе Исходный текст и считыватель.
- Сохранение и проверка запуска описаны в разделе Записи решений.
- Преобразование исходника в изображение и обратно описано в разделе Изображения Лиспекса.
- Аутентификация подписанта и повторная проверка своего запроса описаны в разделе Ваучер Лиспекса.