1

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

Я готов изучать lua или python и кодировать их (я использую современный C++), но я не уверен, какие инструменты доступны и как сделать это быстро.

Я планирую сделать так, чтобы он выглядел начиная с предыдущего объявления текстового элемента и до следующего объявления элемента. может быть смотреть в отменить дерево. посмотреть, есть ли какие-либо изменения. если есть, измените дату после объявления текущего раздела. также было бы неплохо скрыть эти даты и показать их обратно.

2 ответа2

1

Это возможно, но для этого потребуется знание языка сценариев Vim. Вам нужно будет написать функцию Vim, которая может найти местоположение даты в текущем разделе без "экранирования" этого раздела, а затем изменить эту строку. Как только функция написана, вам нужно присоединить ее к autocmd.

Например, если ваша функция называлась TexAutoDate() вы можете вызывать ее автоматически каждый раз, когда пишете файл, заканчивающийся на .tex таким образом:

:autocmd BufWritePre *.tex :call TexAutoDate()

К сожалению, фактическое тело функции будет довольно сложным, и, не зная больше о вашем файле, я не могу вам чем-то помочь. У меня есть функция, которую я написал для аналогичной цели, но она не ограничивается разделами. Следующая функция автоматически обновляет строку «Последнее изменение:» файла справки Vim при записи:

function HelpModifiedUpdate()
    if &filetype != "help"
        return
    endif

    let today=strftime('%Y %b %d')

    " Save current cursor position:
    let lnum = line('.')
    let col  = col('.')

    if search('Last change: ', 'w')
        let line1 = getline('.')
        if line1 =~ today
            " Restore cursor position:
            call cursor(lnum, col)
            return
        endif
        let line2 = substitute(
            \line1,
            \'Last change: .*',
            \'Last change: ' . today,
            \''
        \)
        call setline('.', line2)
    endif

    " Restore cursor position:
    call cursor(lnum, col)
endfunction

Увидеть:

:help :autocmd
:help :function
:help eval.txt

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

0

Вероятно, самый простой способ сделать это - установить плагин сниппета. Я предпочитаю ultisnips, потому что он намного мощнее, но snipmate также очень популярен.

С ultisnips я бы определил такой фрагмент в моем файле tex.snippets ;

snippet sec "section" b
\section{`!v strftime("%Y-%m-%d")`: ${1:section label}}

$0
endsnippet

Если вы сейчас наберете sec в начале строки и нажмете клавишу <tab> , фрагмент развернется, вставив текущую дату (с помощью функции strftime ) и попросив вас заполнить метку раздела.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .