Переформатирование текста (или, лучше, LaTeX) в 80 колонках в SciTE

Недавно я погрузился в LaTeX, начав с помощи WYSIWYM-редактора, такого как Lix. Теперь я начинаю писать tex-файлы в Sci-TE, в нем уже есть подсветка синтаксиса, и я адаптировал файл tex.properties для работы в Windows, показывая предварительный просмотр на Go [F5]

Одна приятная вещь, которую делает Lyx, и которую трудно достичь с помощью обычного текстового редактора, — это форматирование текста в 80 столбцов: я могу написать абзац и нажимать «Ввод» каждый раз, когда дохожу до края столбца, но если после первого черновика я хочу добавить или вырезать некоторые слова здесь и там, я в конечном итоге нарушаю макет и вынужден переставлять новые строки.

Было бы полезно иметь инструмент в Sci-TE, чтобы я мог выбрать абзац текста, в котором я добавил или удалил несколько слов, и переставить его в 80 столбцов. Вероятно, что-то не работает со всем документом, так как это, вероятно, может сломать предполагаемый ожидаемый разрыв строки.

Вероятно, я мог бы легко написать плагин Python для geany, я видел, что у vim есть что-то подобное, но я хотел бы знать, возможно ли это и в Sci-TE.


person neurino    schedule 21.07.2010    source источник


Ответы (4)


Я был немного разочарован, когда не нашел ответа, так как искал то же самое. Помощников у Google тоже нет, поэтому я искал примеры и синтаксис Lua в надежде создать его самостоятельно. Я не знаю Lua, поэтому, возможно, это можно сделать по-другому или эффективно, но это лучше, чем ничего, я надеюсь - вот функция Lua, которую нужно поместить в скрипт запуска SciTE Lua:

function wrap_text()

    local border = 80
    local t = {}

    local pos = editor.SelectionStart
    local sel = editor:GetSelText()
    if #sel == 0 then return end

    local para = {}
    local function helper(line) table.insert(para, line) return "" end
    helper((sel:gsub("(.-)\r?\n", helper)))

    for k, v in pairs(para) do
        line = ""
        for token in string.gmatch(v, "[^%s]+") do
            if string.len(token .. line) >= border then
                t[#t + 1] = line
                line = token .. " "
            else
                line = line .. token .. " "
            end
        end
        t[#t + 1] = line:gsub("%s$", "")
    end

    editor:ReplaceSel(table.concat(t, "\n"))
    editor:GotoPos(pos)

end

Использование аналогично любой другой функции из сценария запуска, но для полноты картины я вставлю свое определение инструмента из файла свойств SciTE:

command.name.8.*=Wrap Text
command.mode.8.*=subsystem:lua,savebefore:no,groupundo
command.8.*=wrap_text
command.replace.selection.8.*=2

Он учитывает абзацы, поэтому его можно использовать для более широкого выбора, а не только для одного абзаца.

person theta    schedule 13.01.2012
comment
Спасибо, я принимаю ответ, но сейчас у меня нет возможности проверить его, так как я перешел на Linux, а в редакторе Geany есть хороший ярлык для этого, сохраняющий отступы и абзацы. Это будет полезно, если мне нужно будет вернуться к Windows в будущем. Ваше здоровье. - person neurino; 15.01.2012
comment
Отступ (отступ между началом строки и началом абзаца) не сохраняется. Он просто переформатирует простым способом, основанным на цикле по длине слов. Кстати, я использую последнюю версию SciTE 3.02 в Linux. Geany тоже хорош, но я использую SciTE и в Windows, и в Linux. - person theta; 15.01.2012

Это один из способов сделать это в scite: сначала добавьте это в свой .SciTEUser.properties (Параметры/Открыть файл параметров пользователя):

# Column guide, indicates long lines (https://wiki.archlinux.org/index.php/SciTE)
# this is what they call "margin line" in gedit (at right),
# in scite, "margin" is the area on left for line numbers
edge.mode=1
edge.column=80

... и сохраните, чтобы вы могли видеть строку в 80 символов.

Затем масштабируйте окно scite так, чтобы текст, который вы видите, переносился на строку.

Наконец, выделите длинную строку текста, которую нужно разбить на строки, и выполните «Правка» / «Абзац» / «Разделить» (у меня для этого также работает сочетание клавиш Ctrl-K).

К сожалению, похоже, что в scite нет функции "разрыва строки при вводе", как функции "разрыва строки" в geany. больше нет, теперь есть подключаемый модуль - см. этот ответ

person sdaau    schedule 18.01.2013

то же самое, но проще, я думаю...

поместите это в свойства пользователя:

command.name.0.*=swrap
command.0.*=fold -s $(FileNameExt) > /tmp/scite_temp ; cat /tmp/scite_temp >$(FileNameExt)
command.is.filter.0.*=1

Чао Пьетро

person Pietro    schedule 14.01.2012
comment
Чао Пьетро, ​​насколько я знаю, fold, cat и перенаправление файлов не будут работать в Windows... В любом случае, это хорошо для Linux :) - person neurino; 16.01.2012

Что ж, я был довольно разочарован тем, что в scite, похоже, нет средства "разрыва строк при вводе". ; и мне, наконец, удалось написать для этого небольшой плагин/надстройку/расширение Lua, и я опубликовал его здесь:

Инструкции по установке и использованию находятся в самом скрипте. Вот как может выглядеть SciTE, когда расширение правильно установлено и переключатель активирован после запуска:

SciteLineBreak.png

Обратите внимание, что это почти та же функциональность, что и в geany - он вставляет разрывы строк при вводе текста, но не при нажатии клавиши Backspace или при копировании/вставке.

person sdaau    schedule 06.04.2013
comment
В geany это гораздо менее автоматизировано: у вас есть пункт меню (и ярлык kyb), который переформатирует выделенный текст или абзац, не более того. В любом случае этого вполне достаточно, так как вам не нужно заботиться о том, как вставляется текст: когда вы закончите редактирование блока, вы Ctrl-J его и все. - person neurino; 08.04.2013