добавить (установить) перед абзацем вертикальный отступ высотой 12 пунктов

Автор leopoldus, 16 октября 2016, 18:16

0 Пользователи и 1 гость просматривают эту тему.

leopoldus

Вот, казалось бы, совсем простая задача, но не соображу, с какой стороны лучше подойти. Хочу создать команду (стиль? макрос?), которая устанавливала бы высоту вертикального отступа перед текущим абзацем (или перед каждым из выделенных абзацев) равной 12 пунктов (0,42 cm) вместо любого другого (от 0 до бесконечности), который уже имеется.

А в идеале еще сделать так, что если высота отступа и так имеет 12 пунктов, то тогда, наоборот, убирать этот отступ (устанавливать его высоту равной 0,00). То есть, получить функциональный аналог хоткея Ctr+0 в MS Word. Но это уже опционально.
Спасибо!

leopoldus

Правильно ли я понимаю по всеобщему молчанию, что описанная мной задача никак не решается? На мой дилетантский взгляд, она казалась довольно простой...


leopoldus

Цитата: rami от 19 октября 2016, 19:34А если создать стиль с нужным отступом?
Насколько я понимаю, это не решает вторую часть задачи (если отступ уже равен 12-и пунктам, то удалить его, то есть, изменить на 0 пунктов).

rami

Цитата: leopoldus от 19 октября 2016, 21:47
Цитата: rami от 19 октября 2016, 19:34А если создать стиль с нужным отступом?
Насколько я понимаю, это не решает вторую часть задачи (если отступ уже равен 12-и пунктам, то удалить его, то есть, изменить на 0 пунктов).
А для чего это нужно?

leopoldus

Цитата: rami от 19 октября 2016, 20:01А для чего это нужно?

Скажем так, дурная привычка на уровне рефлекса, приобретенная за долгие годы работы в MS Word. Там есть хоткей Ctrl+O, который работает именно таким образом по кругу 12 pt - 0 pt - 12 pt - 0 pt... Удобно посмотреть, не переставляя пальцев, как будет выглядеть текст при том или ином отступе. Вероятно, через некоторое время я смогу  избавиться от этой привычки, но на переходный период мне бы пригодился заменитель.

И еще вопрос на ту же тему. Можно ли назначить хоткей, который менял бы расстояния перед абзацем, увеличивая его при каждом нажатии на некоторый фиксированный шаг, например, 0,1 cm. То есть, нажал 1 раз - расстояние стало 0,1 см, нажал второй раз - стало 0,2 см, нажал 10 раз подряд - получил отступ перед абзацем в 1 см.
В LibreOffice Writer есть похожая встроенная команда (Format => Spacing => Increase paragraph spacing), но она одновременно изменяет отступ перед и после абзаца. А мне не надо "после", а надо только "перед".

mikekaganski

Вот:
Sub TopMargin12pt

Dim Doc As Object
Dim Enum1 As Object
Dim TextElement As Object

Doc = ThisComponent
Enum1 = Doc.getCurrentSelection().getByIndex(0).createEnumeration

ThisComponent.LockControllers
' loop over all paragraphs
While Enum1.hasMoreElements
  TextElement = Enum1.nextElement

  If TextElement.supportsService("com.sun.star.text.Paragraph") Then
    If (TextElement.ParaTopMargin <> 423) Then
      TextElement.ParaTopMargin = 423 ' 12 * 0.3528 * 100 = 12 pt in 100h of mm
    Else
      TextElement.ParaTopMargin = 0
    End If
  End If
Wend
ThisComponent.UnlockControllers
End sub

Sub TopMarginIncrease

Dim Doc As Object
Dim Enum1 As Object
Dim TextElement As Object

Doc = ThisComponent
Enum1 = Doc.getCurrentSelection().getByIndex(0).createEnumeration

ThisComponent.LockControllers
' loop over all paragraphs
While Enum1.hasMoreElements
  TextElement = Enum1.nextElement

  If TextElement.supportsService("com.sun.star.text.Paragraph") Then
    TextElement.ParaTopMargin = TextElement.ParaTopMargin + 100
  End If
Wend
ThisComponent.UnlockControllers
End sub


Но это неудачная идея.
С уважением,
Михаил Каганский

economist

leopoldus - рискну предположить что вы пишете/верстаете стихи или сценарии. Я тоже это делаю. И ничего нет лучше - чем заранее созданные стили (Ctrl+0...9), которые позволяют мне набирать стихи со скоростью пули. Их не так много надо - для 300-страничной книжки - хватает десятка (и на заголовки тоже). Четные и нечетные четверостишия сами разбросаны по сторонам, между ними - красивый интервал, звездочки "* * *" - выровнены как надо. Красота.

А вот перебитый с дефолта хотей Ctrl+O, который де факто стандарт для вызова команды "Файл-Открыть" во всех приложениях - не только дурная, но и вредная привычка. Отвыкайте от неё быстрее. То же касается и интервала +0,1. Это патологический "перфекционизм". Отступы абзацев должны подчиняться золотому сечению и шкалам нонпарель и цицеро. Только тогда они будут гармоничными, "по алгебре" :-))

В OpenOffice и LibreOffice есть чумовой, но опасный флажок "не делать отступ между абзацами одного типа", создавая стили обратите на него внимание.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

leopoldus

Цитата: mikekaganski от 20 октября 2016, 00:56
Вот:
Но это неудачная идея.

Я знаю, что неудачная. Но всё равно большое спасибо за макрос!


Цитата: economist от 20 октября 2016, 08:24leopoldus - рискну предположить что вы пишете/верстаете стихи или сценарии. Я тоже это делаю

Приятно встретить коллегу! Да, есть немного. Хотя это и не единственное, для чего я использую (вернее, пытаюсь использовать) LibreOffice Writer.

Цитата: economist от 20 октября 2016, 08:24И ничего нет лучше - чем заранее созданные стили (Ctrl+0...9), которые позволяют мне набирать стихи со скоростью пули.

Я уже понял это... но пока, скорее, на уровне общей концепции. Долгие годы пребывания во тьме работы в MS Word давят тяжким грузом и требуют дани. Борьба с собой протекает с непременным переменным успехом, но, увы, без надежды на окончательную победу ;)

Цитата: economist от 20 октября 2016, 08:24А вот перебитый с дефолта хотей Ctrl+O, который де факто стандарт для вызова команды "Файл-Открыть" во всех приложениях

Чисто для ясности замечу, что в упомянутой дефолтной комбинации [Ctrl+0] из MS Word второй элемент - цифра "ноль", а не заглавная буква "О".

Цитата: economist от 20 октября 2016, 08:24То же касается и интервала +0,1. Это патологический "перфекционизм". Отступы абзацев должны подчиняться золотому сечению и шкалам нонпарель и цицеро. Только тогда они будут гармоничными, "по алгебре" :-))

"Золотое сечение" и высшие гармоники - это, конечно, здорово. Но, когда работаешь в команде, приходится помимо прочего учитывать проблемы совместимости с другим софтом, (и, прежде всего, с MS Word).

Цитата: economist от 20 октября 2016, 08:24В OpenOffice и LibreOffice есть чумовой, но опасный флажок "не делать отступ между абзацами одного типа", создавая стили обратите на него внимание.

Уже заметил. Надеюсь, не расстрою сообщением, что как раз эта фишка заимствована у ненавистного Microsoft'а?

:off-topic:
Цитата: economist от 20 октября 2016, 08:24должны подчиняться золотому сечению и шкалам

Даже ради достижения гармонии не надо подчиняться шакалам ;D

economist

На самом деле со стилями всё просто: пишешь 4-ю строку четверостишия, нажимаешь Enter и Ctrl+7 - и 1-я строка следующего четверостишия сама отскакивает вправо и вниз, формируя заранее продуманный отступ. Если после набора всей книжки пяток стихов некрасиво рвутся - просто меняется отступ до/после - и все становится красиво.

Если кратко - ни одно верстальное действие не должно автоматизироваться циклически, если оно должно меняться всего дважды - в начале верстки и в ее конце.

Про шакалов - полностью согласен. Поэтому у меня каждая книжка из десятка - имеет все-таки свой набор стилей и гарнитур. В одном стандарте - только офисные документы (около 3 тыс.)

С "ненавистным" MSO Word я не работаю с 2009 г. Но сталкиваюсь постоянно (а Excel - вообще основной рабочий инструмент, за 20 лет - 30 тыс. строк кода на VBA).
Могу сказать что OpenOffice и LibreOffice заимствовали от MSO, имхо, 60% всего функционала. Но вот именно в противостоянии Word/Writer - теперь мелкомягким есть чему поучиться у СПО. Работа со стилями во Writer - на голову лучше продумана и реализована.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...