LaTex-Makro und Vim-Plugin zum einfachen Einbinden von Grafiken

In meiner Dissertation habe ich einige Grafiken eingebunden. Damit mir das leichter von der Hand geht, habe ich mir zum einen ein LaTeX-Makro und zum anderen ein vim-Plugin geschrieben. Ich zeig dir, wie einfach das ist.

Normalerweise binde ich eine Grafik in meinen LaTeX-Dokumenten so ein:

\begin{figure}[htbp]
	\centering
	\includegraphics{Pfad/zur/Grafik}
	\caption{Bildunterschrift}
	\label{fig:bildlabel}
\end{figure}

Damit ich mir diese paar Zeilen nicht per copy’n’paste merken musste, habe ich mir dafür ein LaTeX-Makro geschrieben. Es benutzt das Paket twoopt mit dem ein LaTeX-Makro mit zwei optionalen Parametern möglich werden.
Fügt diesen Code an geeigneter Stelle in euer LaTeX-Dokument ein.

\usepackage{graphicx}
\usepackage{twoopt}

\newcommandtwoopt{\bild}[4][1][htbp]{
\begin{figure}[#2]
\centering
\includegraphics[width=#1\textwidth]{#3}
\caption{#4}
\label{fig:#3}
\end{figure}
}

Nun kann ich das Makro nutzen und einfach eine Grafik einbinden: \bild[0.8]{Pfad/zur/Grafik}{Bildunterschrift}.

Vim-Plugin

Da ich vim nutze, habe ich mir dafür ein Plugin geschrieben. Obwohl VimScript ziemlich kompliziert und mächtig ist, sind erste Erfolge schnell erreichbar. Das Plugin zeigt mir in einer Auswahlliste alle Grafikdateien an und bindet die ausgewählte Grafik, mit dem oben beschriebenen Makro, an der aktuellen Position im Text ein.

function! GetLaTeXBild()
 " Erzeugt eine Liste aller Grafiken (*.p{df,ng}) im Ordner ./grafiken.
 let grafiken=split(glob('./grafiken/*.p{df,ng}'), '\n')
 " Verändert grafiken
 " Aus ['./grafiken/ABC.pdf'] wird ['ABC']
 call map(grafiken, 'split(split(v:val, "/")[-1], "\\.")[0]')
 " Erzeugt eine neue Liste für die interaktive Auswahl
 " ['1: ABC', '2: DEF']
 let auswahl=map(copy(grafiken), 'v:key+1.": ".v:val')
 " und fügt dieser Liste einen „Beschreibungstext hinzu“
 call insert(auswahl, "Auswahl Grafik")
 " Ruft die Listenauswahl von VIM auf.
 " Da wir einen Beschreibungstext hinzugefügt haben, ziehen wir wieder
 " 1 vom Index ab
 let idx = inputlist(auswahl)-1
 " Ist der Index valide?
 if idx < 0 || idx >=  len(grafiken)
    return '\bild{bild}{caption}'
  else
    return '\bild{'.grafiken[idx].'}{caption}'
  endif
endfunction

imap <Leader>b <C-R>=GetLaTeXBild()<CR>

Meinen Leader-Key habe ich in vim auf’s Komma gesetzt: set mapleader=",". Tippe ich im Eingabemodus nun ,b so erscheint die Auswahlliste.