Re: [dk-tug] [OT] egne emacs-makroer
Lars Madsen <[email protected]>
| Newsgroups | gmane.comp.tex.danish |
|---|---|
| Message-ID | <[email protected]> |
Lars Madsen wrote, On 2012-01-17 23:09:
> 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
>
>
> _______________________________________________
> [email protected] mailing list
> http://mailman.nfit.au.dk/mailman/listinfo/tug.dk-dk-tug
En let forbedret version
(defun cardinality-replace (beg end)
(interactive "r")
(let (str reg_start reg_end)
(setq str (buffer-substring beg end))
(setq reg_start "\\`[ \t]*\\(|\\|\\\\vert\\|\\\\lvert\\)")
(setq reg_end "\\(|\\|\\\\vert\\|\\\\rvert\\)[ \t]*\\'")
(if (not
(and
(string-match reg_start str)
(string-match reg_end str)
)
)
(message "no match")
(setq str (replace-regexp-in-string reg_start "" str))
(setq str (replace-regexp-in-string reg_end "" str))
(delete-region beg end)
(insert (concat "\\card{" str "}"))
)
)
)
her erstattes kun hvis begge regexper matcher. Hvis ikke der er match
giver den en meddelelse.
Der er forresten en masse interessante emacs tips at finde på
http://xahlee.org/emacs/emacs.html
--
/Lars Madsen
DK-TUG formand, tug.dk