Thank you very much for sharing! Unfortunately this produces an error "IndexError:list index out of range" in a recent pandoc version: 1.19.2.1 Traceback (most recent call last): File "filters/tabular.py", line 53, in pf.toJSONFilter(do_filter) File "/usr/local/lib/python2.7/dist-packages/pandocfilters.py", line 132, in toJSONFilter toJSONFilters([action]) File "/usr/local/lib/python2.7/dist-packages/pandocfilters.py", line 166, in toJSONFilters sys.stdout.write(applyJSONFilters(actions, source, format)) File "/usr/local/lib/python2.7/dist-packages/pandocfilters.py", line 197, in applyJSONFilters altered = walk(altered, action, format, meta) File "/usr/local/lib/python2.7/dist-packages/pandocfilters.py", line 124, in walk x[k] = walk(x[k], action, format, meta) File "/usr/local/lib/python2.7/dist-packages/pandocfilters.py", line 111, in walk item['c'] if 'c' in item else None, format, meta) File "filters/tabular.py", line 46, in do_filter tbl_headers(v[3]), File "filters/tabular.py", line 22, in tbl_headers result = s[0][0]['c'][:] IndexError: list index out of range pandoc: Error running filter filters/tabular.py Filter returned error status 1 Am Dienstag, 1. Juli 2014 03:59:26 UTC+2 schrieb Wagner Macedo: > > Hello guys. > > I don't like how *longtable* handle with tables, spanning across pages > without needing, so I took advantage of the filtering mechanism and I did a > filter in python to generate the tables in a more traditional way (in the > sense of Latex) and I'm sharing with you below. > > Please make suggestions, I did the things a few hardcoded because I didn't > see other way. > > To understand what the filter do, let's say I have a file with the > following table: > > *test.mkd* > > Code Name > ------ ------ > 1 Pandoc > 2 Latex > 3 Writer > > Table: My *best* tools > > The normal generated latex code would be > > *test-longtable.tex* > > \begin{longtable}[c]{@{}cl@{}} > \toprule\addlinespace > Code & Name > \\\addlinespace > \midrule\endhead > 1 & Pandoc > \\\addlinespace > 2 & Latex > \\\addlinespace > 3 & Writer > \\\addlinespace > \bottomrule > \addlinespace > \caption{My \emph{best} tools} > \end{longtable} > > But using the filter, the latex code will be > > *test-tabular.tex* > > \begin{table}[ht] > > \caption{My \emph{best} tools} > > \begin{tabular}{@{}cl@{}} > \toprule > > Code & Name \\\midrule > > 1 & Pandoc \\ > 2 & Latex \\ > 3 & Writer \\ > > \bottomrule > \end{tabular} > > \end{table} > > Note I put \caption above as is more common to my writings. > > *filter.py* > > import pandocfilters as pf > def latex(s): > return pf.RawBlock('latex', s) > def inlatex(s): > return pf.RawInline('latex', s) > def tbl_caption(s): > return pf.Para([inlatex(r'\caption{')] + s + [inlatex('}')]) > def tbl_alignment(s): > aligns = { > "AlignDefault": 'l', > "AlignLeft": 'l', > "AlignCenter": 'c', > "AlignRight": 'r', > } > return ''.join([aligns[e['t']] for e in s]) > def tbl_headers(s): > result = s[0][0]['c'][:] > for i in range(1, len(s)): > result.append(inlatex(' & ')) > result.extend(s[i][0]['c']) > result.append(inlatex(r' \\\midrule')) > return pf.Para(result) > def tbl_contents(s): > result = [] > for row in s: > para = [] > for col in row: > para.extend(col[0]['c']) > para.append(inlatex(' & ')) > result.extend(para) > result[-1] = inlatex(r' \\' '\n') > return pf.Para(result) > def do_filter(k, v, f, m): > if k == "Table": > return [latex(r'\begin{table}[ht]' '\n' r'\centering' '\n'), > tbl_caption(v[0]), > latex(r'\begin{tabular}{@{}%s@{}}' % tbl_alignment(v[1]) + > ('\n' r'\toprule')), > tbl_headers(v[3]), > tbl_contents(v[4]), > latex(r'\bottomrule' '\n' r'\end{tabular}'), > latex(r'\end{table}')] > > if __name__ == "__main__": > pf.toJSONFilter(do_filter) > > -- > Wagner Macedo > -- You received this message because you are subscribed to the Google Groups "pandoc-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To post to this group, send email to pandoc-discuss-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/1dafcdfb-9bf9-4e82-8768-1b1905fc204a%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.