
Ich verwende Latex als Tagebuch mit Abschnitten für jedes Thema. Ich füge jedem Textelement (Abschnitt, Unterabschnitt, Unterunterabschnitt usw.) manuell das Erstellungs- und Änderungsdatum hinzu. Gibt es eine Möglichkeit, dies automatisch zu machen?
Ich bin bereit, Lua oder Python zu lernen und es zu programmieren (ich verwende modernes C++), aber ich bin nicht sicher, welche Tools verfügbar sind und wie ich es schnell machen kann.
Mein Plan ist, es so aussehen zu lassen, dass es von der vorherigen Textelementdeklaration bis zur nächsten Elementdeklaration reicht. Vielleicht schauen Sie im Undo-Baum nach, um zu sehen, ob es Änderungen gibt. Wenn ja, ändern Sie das Datum nach der Deklaration des aktuellen Abschnitts. Es wäre auch schön, diese Daten auszublenden und wieder anzuzeigen.
Antwort1
Dies ist möglich, erfordert jedoch Kenntnisse der Skriptsprache von Vim. Sie müssen eine Vim-Funktion schreiben, die die Position des Datums im aktuellen Abschnitt finden kann, ohne diesen Abschnitt zu „verlassen“, und dann diese Zeile ändern. Sobald die Funktion geschrieben ist, müssen Sie sie an ein Autocmd anhängen.
Wenn Ihre Funktion beispielsweise aufgerufen wurde, TexAutoDate()
könnten Sie sie jedes Mal automatisch aufrufen, wenn Sie eine Datei mit .tex
der folgenden Endung schreiben:
:autocmd BufWritePre *.tex :call TexAutoDate()
Leider ist der eigentliche Funktionskörper ziemlich komplex und ohne mehr über Ihr Dateilayout zu wissen, kann ich Ihnen nicht viel helfen. Ich habe eine Funktion, die ich für einen ähnlichen Zweck geschrieben habe, aber sie beschränkt sich nicht auf Abschnitte. Die folgende Funktion aktualisiert die Zeile „Letzte Änderung:“ einer Vim-Hilfedatei automatisch beim Schreiben:
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
Sehen:
:help :autocmd
:help :function
:help eval.txt
Letzteres ist umfangreich und Sie müssen nicht die gesamte Datei durchlesen, aber es enthält vieles von dem, was Sie brauchen, wenn Sie Vim-Skripte noch nicht kennen.
Antwort2
Der wahrscheinlich einfachste Weg, dies zu tun, ist die Installation eines Snippet-Plugins. Ich bevorzugeAbonnierenweil es viel leistungsfähiger ist, aberschnipsenerfreut sich auch großer Beliebtheit.
Mit Ultisnips würde ich einen Snippet wie diesen in meiner tex.snippets
Datei definieren;
snippet sec "section" b
\section{`!v strftime("%Y-%m-%d")`: ${1:section label}}
$0
endsnippet
Wenn Sie nun sec
am Anfang einer Zeile tippen und die <tab>
Taste drücken, wird das Snippet erweitert und das aktuelle Datum eingefügt (mit demstrfzeit-Funktion) und fordert Sie auf, die Abschnittsbezeichnung auszufüllen.