Re: [dk-tug] [OT] egne emacs-makroer
Lars Madsen <[email protected]>
| Newsgroups | gmane.comp.tex.danish |
|---|---|
| Message-ID | <[email protected]> |
On 01/17/2012 03:29 PM, Lars Madsen wrote:
> Hej
>
> Er der nogen af jer som har nogle gode referencer til hvordan man
> skriver sine egne lidt mere avancerede makoer?
>
> Jeg editerer tit noget som andre har skrevet, og det vil i den
> forbindelse være rart hvis man kan lave sig nogle makroer som kan hjælpe
> en med at rydde op i det andre skriver (således at det der afleveres er
> af en kodemæssig bedre kvalitet).
>
> Forresten: Et et nice tip jeg opdagede forleden (antag der ikke er
> $$...$$ i din buffer), så vil 'M-x LaTeX-fill-buffer' sørge for at
> omformatere hele bufferen så den ser 'pæn' ud (indrykning af
> environments etc.), meget rart at opdage den, min kode er i hvertfald
> blevet meget pænere at kigge på.
>
>
> Nuvel tilbage til emnet.
>
> Konkret sidder jeg med en bruger som anvender |...| i flere forskellige
> sammenhænge (f.eks. absolutværdi og kardinalitet), dette skal
> naturligvis skrives så det er separeret syntaksmæssigt.
>
> Jeg forestiller mig lidt at lave en makro som skal virker på denne måde
> (Sørg for at |...| allerede er markeret som region, og at fortolkningen
> af dette er kardinalitet)
>
> * gå til starten af regionen
> * find første eksemplar fra listen '|', '\vert' eller '\lvert' og slet
> denne
> * gå til slutningen af regionen
> * søg baglæns efter første eksemplar fra listen '|', '\vert' eller
> '\rvert' og slet denne
> * erstat den resterende region med \card{<region>}
>
> Nogen forslag til hvordan denne kodes?
>
>
>
Et muligt svar:
(defun cardinality-replace (beg end)
(interactive "r")
(let ((string (delete-and-extract-region beg end)))
(setq string (replace-regexp-in-string
"^[ \t]*\\(|\\|\\\\vert\\|\\\\lvert\\)" "" string))
(setq string (replace-regexp-in-string
"\\(|\\|\\\\vert\\|\\\\rvert\\)[ \t]*$" "" string))
(insert (concat "\\card{" string "}"))
)
)
forslag til forbedringer modtages gerne.
En naturlig tilføjelse vil være at teste om de to regexp'er matcher,
også kun gøre noget hvis der er et match