[Vim-latex-devel] Latex Suite suggestions for folding
Brought to you by:
srinathava,
tmaas
From: Aditya M. <ad...@um...> - 2003-09-15 21:13:42
|
Hello, Latex-Suite is a really amazing bundle of packages. I have been using it for quite some time and recently read on the c.t.t. newsgroup about the release of its newer version. There are certain things that I had already added to the file that I have and think that it will be good if they are also included in the new release. ... always expands to $\cdots$ This is annoying it I just want to put ... at some place in the comments. Is there some way in which you can check if we are in the math mode or not and then only make the substitution. Some suggested changes for File: folding.vim Add folds for: abstract keywords "Both of these are useful while writing papers " include folds for amsmath package align/alignat gather intertext "include fold for sidewaysfigure These environments need to be added in the TexFoldTextFunction() also. Also when I include a bibliography in the file, it gets folded with the last section. I find this very annoying and found out that this can be removed by ^\s*\\begin{thebibliography}|^\s*\\bibliography tags in the fold end pattern for section, subsection, subsubsection and chapter. This is my folding.vim file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% "============================================================================= " File: folding.vim " Author: Srinath Avadhanula " Version: 1.0 " Created: Tue Apr 23 05:00 PM 2002 PST " " Description: functions to interact with Syntaxfolds.vim "============================================================================= nnoremap <unique> <Plug>Tex_RefreshFolds :call MakeTexFolds(1)<cr> augroup LatexSuite au LatexSuite User LatexSuiteFileType \ call Tex_Debug('folding.vim: catching LatexSuiteFileType') | \ call s:SetFoldOptions() augroup END " SetFoldOptions: sets maps for every buffer {{{ " Description: function! <SID>SetFoldOptions() if exists('b:doneSetFoldOptions') return endif let b:doneSetFoldOptions = 1 setlocal foldtext=TexFoldTextFunction() if g:Tex_Folding && g:Tex_AutoFolding call MakeTexFolds(0) endif if g:Tex_Folding && !hasmapto('<Plug>Tex_RefreshFolds') nmap <silent> <buffer> <Leader>rf <Plug>Tex_RefreshFolds endif endfunction " }}} " MakeTexFolds: function to create fold items for latex. {{{ " " used in conjunction with MakeSyntaxFolds(). " see ../plugin/syntaxFolds.vim for documentation " function! MakeTexFolds(force) if exists('g:Tex_Folding') && !g:Tex_Folding return endif if &ft != 'tex' return end " the order in which these calls are made decides the nestedness. in " latex, a table environment will always be embedded in either an item or " a section etc. not the other way around. so we first fold up all the " tables. and then proceed with the other regions. let b:numFoldItems = 0 " ======================================================================== " How to add new folding items {{{ " ======================================================================== " " Each of the following function calls defines a syntax fold region. Each " definition consists of a call to the AddSyntaxFoldItem() function. " " The order in which the folds are defined is important. Juggling the " order of the function calls will create havoc with folding. The " "deepest" folding item needs to be called first. For example, if " the \begin{table} environment is a subset (or lies within) the \section " environment, then add the definition for the \table first. " " The AddSyntaxFoldItem() function takes either 4 or 6 arguments. When it " is called with 4 arguments, it is equivalent to calling it with 6 " arguments with the last two left blank (i.e as empty strings) " " The explanation for each argument is as follows: " startpat: a line matching this pattern defines the beginning of a fold. " endpat : a line matching this pattern defines the end of a fold. " startoff: this is the offset from the starting line at which folding will " actually start " endoff : like startoff, but gives the offset of the actual fold end from " the line satisfying endpat. " startoff and endoff are necessary when the folding region does " not have a specific end pattern corresponding to a start " pattern. for example in latex, " \begin{section} " defines the beginning of a section, but its not necessary to " have a corresponding " \end{section} " the section is assumed to end 1 line _before_ another section " starts. " startskip: a pattern which defines the beginning of a "skipped" region. " " For example, suppose we define a \itemize fold as follows: " startpat = '^\s*\\item', " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}', " startoff = 0, " endoff = -1 " " This defines a fold which starts with a line beginning with an " \item and ending one line before a line beginning with an " \item or \end{enumerate} etc. " " Then, as long as \item's are not nested things are fine. " However, once items begin to nest, the fold started by one " \item can end because of an \item in an \itemize " environment within this \item. i.e, the following can happen: " " \begin{itemize} " \item Some text <------- fold will start here " This item will contain a nested item " \begin{itemize} <----- fold will end here because next line contains \item... " \item Hello " \end{itemize} <----- ... instead of here. " \item Next item of the parent itemize " \end{itemize} " " Therefore, in order to completely define a folding item which " allows nesting, we need to also define a "skip" pattern. " startskip and end skip do that. " Leave '' when there is no nesting. " endskip: the pattern which defines the end of the "skip" pattern for " nested folds. " " Example: " 1. A syntax fold region for a latex section is " startpat = "\\section{" " endpat = "\\section{" " startoff = 0 " endoff = -1 " startskip = '' " endskip = '' " Note that the start and end patterns are thus the same and endoff has a " negative value to capture the effect of a section ending one line before " the next starts. " 2. A syntax fold region for the \itemize environment is: " startpat = '^\s*\\item', " endpat = '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}', " startoff = 0, " endoff = -1, " startskip = '^\s*\\begin{\(enumerate\|itemize\|description\)}', " endskip = '^\s*\\end{\(enumerate\|itemize\|description\)}' " Note the use of startskip and endskip to allow nesting. " " " }}} " ======================================================================== " {{{ footnote "call AddSyntaxFoldItem ( " \ '^\s*\\footnote{', " \ '^\s*}', " \ 0, " \ 0 " \ ) " }}} " {{{ intertext call AddSyntaxFoldItem ( \ '^\s*\\intertext{', \ '^\s*}', \ 0, \ 0 \ ) }}} " {{{ abstract call AddSyntaxFoldItem ( \ '^\s*\\begin{abstract}', \ '^\s*\\end{abstract}', \ 0, \ 0 \ ) " }}} " {{{ keywords call AddSyntaxFoldItem ( \ '^\s*\\begin{keywords}', \ '^\s*\\end{keywords}', \ 0, \ 0 \ ) " }}} " {{{ thebibliography call AddSyntaxFoldItem ( \ '^\s*\\begin{thebibliography}', \ '^\s*\\end{thebibliography}', \ 0, \ 0 \ ) " }}} " {{{ biography call AddSyntaxFoldItem ( \ '^\s*\\begin{biography}', \ '^\s*\\end{biography}', \ 0, \ 0 \ ) " }}} " {{{ biographynophoto call AddSyntaxFoldItem ( \ '^\s*\\begin{biographynophoto}', \ '^\s*\\end{biographynophoto}', \ 0, \ 0 \ ) " }}} " {{{ table call AddSyntaxFoldItem ( \ '^\s*\\begin{table}', \ '^\s*\\end{table}', \ 0, \ 0 \ ) " }}} " {{{ figure call AddSyntaxFoldItem ( \ '^\s*\\begin{figure', \ '^\s*\\end{figure}', \ 0, \ 0 \ ) " }}} " {{{ sidewaysfigure call AddSyntaxFoldItem ( \ '^\s*\\begin{sidewaysfigure', \ '^\s*\\end{sidewaysfigure}', \ 0, \ 0 \ ) " }}} " {{{ align/alignat call AddSyntaxFoldItem ( \ '^\s*\\begin{align', \ '^\s*\\end{align', \ 0, \ 0 \ ) " }}} " {{{ gather call AddSyntaxFoldItem ( \ '^\s*\\begin{gather', \ '^\s*\\end{gather', \ 0, \ 0 \ ) " }}} " {{{ equation/eqnarray call AddSyntaxFoldItem ( \ '^\s*\\begin{eq', \ '^\s*\\end{eq', \ 0, \ 0 \ ) " }}} " {{{ items call AddSyntaxFoldItem ( \ '^\s*\\item', \ '^\s*\\item\|^\s*\\end{\(enumerate\|itemize\|description\)}', \ 0, \ -1, \ '^\s*\\begin{\(enumerate\|itemize\|description\)}', \ '^\s*\\end{\(enumerate\|itemize\|description\)}' \ ) " }}} " {{{ subsubsection call AddSyntaxFoldItem ( \ '^\s*\\subsubsection\W', \ '^\s*\\appendix\W\|^\s*\\subsubsection\W\|^\s*\\subsection\W\|^\s*\\section\W\|^\s*\\bibliography\|^\s*%%fakesection\|^\s*\\chapter\W\|^\s*\\begin{thebibliography\|^\s*\\begin{slide\|^\s*\\end{document', \ 0, \ -1, \ ) " }}} " {{{ subsection call AddSyntaxFoldItem ( \ '^\s*\\subsection\W', \ '^\s*\\appendix\W\|^\s*\\subsection\W\|^\s*\\section\W\|^\s*%%fakesection\|^\s*\\bibliography\|^\s*\\chapter\W\|^\s*\\begin{slide\|^\s*\\begin{thebibliography\|^\s*\\end{document', \ 0, \ -1, \ ) " }}} " {{{ section call AddSyntaxFoldItem ( \ '^\s*\\section\W', \ '^\s*\\appendix\W\|^\s*\\section\W\|^\s*\\bibliography\|^\s*%%fakesection\|^\s*\\chapter\W\|^\s*\\begin{slide\|^\s*\\begin{thebibliography\|^\s*\\end{document', \ 1, \ -1, \ ) " }}} " {{{ fakesection (for forcinga fold item manually) call AddSyntaxFoldItem ( \ '^\s*%%fakesection', \ '^\s*\\appendix\W\|^\s\\section\W\|^\s*%%fakesection\|^\s*\\bibliography\|^\s*\\chapter\W\|^\s*\\begin{slide\|^\s*\\begin{thebibliography\|^\s*\\end{document', \ 0, \ -1, \ ) " }}} " {{{ chapter call AddSyntaxFoldItem( \ '^\s*\\chapter\W', \ '^\s*\\appendix\W\|^\s*\\chapter\W\|^\s*\\bibliography\|^\s*\\begin{slide\|^\s*\\begin{thebibliography\|^\s*\\end{document', \ 0, \ -1 \ ) " }}} " {{{ slide call AddSyntaxFoldItem ( \ '^\s*\\begin{slide', \ '^\s*\\appendix\W\|^\s*\\chapter\W\|^\s*\\end{slide\|^\s*\\end{document', \ 0, \ 0 \ ) " }}} call MakeSyntaxFolds(a:force) normal! zv endfunction " }}} " TexFoldTextFunction: create fold text for folds {{{ function! TexFoldTextFunction() if getline(v:foldstart) =~ '^\s*\\begin{' let header = matchstr(getline(v:foldstart), '^\s*\\begin{\zs\(figure\|sidewaysfigure\|table\|equation\|eqnarray\|gather\|align\|abstract\|keywords\|thebibliography\)[^}]*\ze}') let caption = '' let label = '' let i = v:foldstart while i <= v:foldend if getline(i) =~ '\\caption' let caption = matchstr(getline(i), '\\caption{\zs.*') let caption = substitute(caption, '\zs}[^}]*$', '', '') elseif getline(i) =~ '\\label' let label = matchstr(getline(i), '\\label{\zs.*') let label = substitute(label, '\zs}[^}]*$', '', '') end let i = i + 1 endwhile let ftxto = foldtext() " if no caption found, then use the second line. if caption == '' let caption = getline(v:foldstart + 1) end let retText = matchstr(ftxto, '^[^:]*').': '.header.' ('.label.') : '.caption return retText else return foldtext() end endfunction " }}} " vim:fdm=marker:ff=unix:noet:ts=4:sw=4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |