<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>astropy.io.ascii.latex — Astropy v0.2.4</title> <link rel="stylesheet" href="../../../../_static/bootstrap-astropy.css" type="text/css" /> <link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../../', VERSION: '0.2.4', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../../_static/doctools.js"></script> <script type="text/javascript" src="../../../../_static/sidebar.js"></script> <link rel="shortcut icon" href="../../../../_static/astropy_logo.ico"/> <link rel="top" title="Astropy v0.2.4" href="../../../../index.html" /> <link rel="up" title="Module code" href="../../../index.html" /> </head> <body> <div class="topbar"> <a class="brand" title="Documentation Home" href="../../../../index.html"></a> <ul> <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li> <li><a title="General Index" href="../../../../genindex.html">Index</a></li> <li><a title="Python Module Index" href="../../../../py-modindex.html">Modules</a></li> <li> <form action="../../../../search.html" method="get"> <input type="text" name="q" placeholder="Search" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </li> </ul> </div> <div class="related"> <h3>Navigation</h3> <ul> <li> <a href="../../../../index.html">Astropy v0.2.4</a> » </li> <li><a href="../../../index.html" accesskey="U">Module code</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for astropy.io.ascii.latex</h1><div class="highlight"><pre> <span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span> <span class="sd">"""An extensible ASCII table reader and writer.</span> <span class="sd">latex.py:</span> <span class="sd"> Classes to read and write LaTeX tables</span> <span class="sd">:Copyright: Smithsonian Astrophysical Observatory (2011)</span> <span class="sd">:Author: Tom Aldcroft (aldcroft@head.cfa.harvard.edu)</span> <span class="sd">"""</span> <span class="c">##</span> <span class="c">## Redistribution and use in source and binary forms, with or without</span> <span class="c">## modification, are permitted provided that the following conditions are met:</span> <span class="c">## * Redistributions of source code must retain the above copyright</span> <span class="c">## notice, this list of conditions and the following disclaimer.</span> <span class="c">## * Redistributions in binary form must reproduce the above copyright</span> <span class="c">## notice, this list of conditions and the following disclaimer in the</span> <span class="c">## documentation and/or other materials provided with the distribution.</span> <span class="c">## * Neither the name of the Smithsonian Astrophysical Observatory nor the</span> <span class="c">## names of its contributors may be used to endorse or promote products</span> <span class="c">## derived from this software without specific prior written permission.</span> <span class="c">##</span> <span class="c">## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND</span> <span class="c">## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span> <span class="c">## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span> <span class="c">## DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY</span> <span class="c">## DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span> <span class="c">## (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span> <span class="c">## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span> <span class="c">## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span> <span class="c">## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span> <span class="c">## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span> <span class="kn">import</span> <span class="nn">re</span> <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">core</span> <span class="n">latexdicts</span> <span class="o">=</span><span class="p">{</span><span class="s">'AA'</span><span class="p">:</span> <span class="p">{</span><span class="s">'tabletype'</span><span class="p">:</span> <span class="s">'table'</span><span class="p">,</span> <span class="s">'header_start'</span><span class="p">:</span> <span class="s">r'\hline \hline'</span><span class="p">,</span> <span class="s">'header_end'</span><span class="p">:</span> <span class="s">r'\hline'</span><span class="p">,</span> <span class="s">'data_end'</span><span class="p">:</span> <span class="s">r'\hline'</span><span class="p">},</span> <span class="s">'doublelines'</span><span class="p">:</span> <span class="p">{</span><span class="s">'tabletype'</span><span class="p">:</span> <span class="s">'table'</span><span class="p">,</span> <span class="s">'header_start'</span><span class="p">:</span> <span class="s">r'\hline \hline'</span><span class="p">,</span> <span class="s">'header_end'</span><span class="p">:</span> <span class="s">r'\hline\hline'</span><span class="p">,</span> <span class="s">'data_end'</span><span class="p">:</span> <span class="s">r'\hline\hline'</span><span class="p">},</span> <span class="s">'template'</span><span class="p">:</span> <span class="p">{</span><span class="s">'tabletype'</span><span class="p">:</span> <span class="s">'tabletype'</span><span class="p">,</span> <span class="s">'caption'</span><span class="p">:</span> <span class="s">'caption'</span><span class="p">,</span> <span class="s">'col_align'</span><span class="p">:</span> <span class="s">'col_align'</span><span class="p">,</span> <span class="s">'preamble'</span><span class="p">:</span> <span class="s">'preamble'</span><span class="p">,</span> <span class="s">'header_start'</span><span class="p">:</span> <span class="s">'header_start'</span><span class="p">,</span> <span class="s">'header_end'</span><span class="p">:</span> <span class="s">'header_end'</span><span class="p">,</span> <span class="s">'data_start'</span><span class="p">:</span> <span class="s">'data_start'</span><span class="p">,</span> <span class="s">'data_end'</span><span class="p">:</span> <span class="s">'data_end'</span><span class="p">,</span> <span class="s">'tablefoot'</span><span class="p">:</span> <span class="s">'tablefoot'</span><span class="p">,</span> <span class="s">'units'</span><span class="p">:</span> <span class="p">{</span><span class="s">'col1'</span><span class="p">:</span> <span class="s">'unit of col1'</span><span class="p">,</span> <span class="s">'col2'</span><span class="p">:</span> <span class="s">'unit of col2'</span><span class="p">}}</span> <span class="p">}</span> <span class="k">def</span> <span class="nf">add_dictval_to_list</span><span class="p">(</span><span class="n">adict</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">alist</span><span class="p">):</span> <span class="sd">'''add a value from a dictionary to a list</span> <span class="sd"> :param adict: dictionary</span> <span class="sd"> :param key: key of value</span> <span class="sd"> :param list: list where value should be added</span> <span class="sd"> '''</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">adict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">adict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="o">==</span> <span class="nb">str</span><span class="p">:</span> <span class="n">alist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">adict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">else</span><span class="p">:</span> <span class="n">alist</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">adict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="k">def</span> <span class="nf">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="n">latex</span><span class="p">):</span> <span class="sd">'''Find the first line which matches a patters</span> <span class="sd"> :param lines: list of strings</span> <span class="sd"> :param latex: search pattern</span> <span class="sd"> :returns: line number or None, if no match was found</span> <span class="sd"> '''</span> <span class="n">re_string</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">latex</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">'</span><span class="se">\\</span><span class="s">'</span><span class="p">,</span> <span class="s">'</span><span class="se">\\\\</span><span class="s">'</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="n">re_string</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">line</span><span class="p">):</span> <span class="k">return</span> <span class="n">i</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">class</span> <span class="nc">LatexHeader</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseHeader</span><span class="p">):</span> <span class="n">header_start</span> <span class="o">=</span> <span class="s">r'\begin{tabular}'</span> <span class="k">def</span> <span class="nf">start_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="n">line</span> <span class="o">=</span> <span class="n">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_start</span><span class="p">)</span> <span class="k">if</span> <span class="n">line</span><span class="p">:</span> <span class="k">return</span> <span class="n">line</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="s">'col_align'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'col_align'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">)</span> <span class="o">*</span> <span class="s">'c'</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\begin{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">+</span> <span class="s">r'}'</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'preamble'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="k">if</span> <span class="s">'caption'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\caption{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'caption'</span><span class="p">]</span> <span class="o">+</span><span class="s">'}'</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">header_start</span> <span class="o">+</span> <span class="s">r'{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'col_align'</span><span class="p">]</span> <span class="o">+</span> <span class="s">r'}'</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'header_start'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]))</span> <span class="k">if</span> <span class="s">'units'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'units'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">' '</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]))</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'header_end'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="k">class</span> <span class="nc">LatexData</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseData</span><span class="p">):</span> <span class="n">data_start</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">data_end</span> <span class="o">=</span> <span class="s">r'\end{tabular}'</span> <span class="k">def</span> <span class="nf">start_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_start</span><span class="p">:</span> <span class="k">return</span> <span class="n">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_start</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">start_line</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">def</span> <span class="nf">end_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_end</span><span class="p">:</span> <span class="k">return</span> <span class="n">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_end</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">return</span> <span class="bp">None</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'data_start'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">core</span><span class="o">.</span><span class="n">BaseData</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'data_end'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_end</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'tablefoot'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\end{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">+</span> <span class="s">'}'</span><span class="p">)</span> <span class="k">class</span> <span class="nc">LatexSplitter</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseSplitter</span><span class="p">):</span> <span class="sd">'''Split LaTeX table date. Default delimiter is `&`.</span> <span class="sd"> '''</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">'&'</span> <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> <span class="sd">"""Remove whitespace at the beginning or end of line. Also remove</span> <span class="sd"> \\ at end of line"""</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'%'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">line</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">:]</span> <span class="o">==</span><span class="s">r'</span><span class="se">\\</span><span class="s">'</span><span class="p">:</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s">r'</span><span class="se">\\</span><span class="s">'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">core</span><span class="o">.</span><span class="n">InconsistentTableError</span><span class="p">(</span><span class="s">r'Lines in LaTeX table have to end with </span><span class="se">\\</span><span class="s">'</span><span class="p">)</span> <span class="k">return</span> <span class="n">line</span> <span class="k">def</span> <span class="nf">process_val</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span> <span class="sd">"""Remove whitespace and {} at the beginning or end of value."""</span> <span class="n">val</span> <span class="o">=</span> <span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="n">val</span> <span class="ow">and</span> <span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">'{'</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">val</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">'}'</span><span class="p">):</span> <span class="n">val</span> <span class="o">=</span> <span class="n">val</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">return</span> <span class="n">val</span> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span> <span class="sd">'''Join values together and add a few extra spaces for readability'''</span> <span class="n">delimiter</span> <span class="o">=</span> <span class="s">' '</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">delimiter</span> <span class="o">+</span> <span class="s">' '</span> <span class="k">return</span> <span class="n">delimiter</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">)</span> <span class="o">+</span> <span class="s">r' </span><span class="se">\\</span><span class="s">'</span> <div class="viewcode-block" id="Latex"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.latex.Latex.html#astropy.io.ascii.latex.Latex">[docs]</a><span class="k">class</span> <span class="nc">Latex</span><span class="p">(</span><span class="n">core</span><span class="o">.</span><span class="n">BaseReader</span><span class="p">):</span> <span class="sd">r'''Write and read LaTeX tables.</span> <span class="sd"> This class implements some LaTeX specific commands. Its main</span> <span class="sd"> purpose is to write out a table in a form that LaTeX can compile. It</span> <span class="sd"> is beyond the scope of this class to implement every possible LaTeX</span> <span class="sd"> command, instead the focus is to generate a syntactically valid</span> <span class="sd"> LaTeX tables.</span> <span class="sd"> This class can also read simple LaTeX tables (one line per table</span> <span class="sd"> row, no ``\multicolumn`` or similar constructs), specifically, it</span> <span class="sd"> can read the tables that it writes.</span> <span class="sd"> Reading a LaTeX table, the following keywords are accepted:</span> <span class="sd"> **ignore_latex_commands** :</span> <span class="sd"> Lines starting with these LaTeX commands will be treated as comments (i.e. ignored).</span> <span class="sd"> When writing a LaTeX table, the some keywords can customize the</span> <span class="sd"> format. Care has to be taken here, because python interprets ``\\``</span> <span class="sd"> in a string as an escape character. In order to pass this to the</span> <span class="sd"> output either format your strings as raw strings with the ``r``</span> <span class="sd"> specifier or use a double ``\\\\``.</span> <span class="sd"> Examples::</span> <span class="sd"> caption = r'My table \label{mytable}'</span> <span class="sd"> caption = 'My table \\\\label{mytable}'</span> <span class="sd"> **latexdict** : Dictionary of extra parameters for the LaTeX output</span> <span class="sd"> * tabletype : used for first and last line of table.</span> <span class="sd"> The default is ``\\begin{table}``. The following would generate a table,</span> <span class="sd"> which spans the whole page in a two-column document::</span> <span class="sd"> ascii.write(data, sys.stdout, Writer = ascii.Latex,</span> <span class="sd"> latexdict = {'tabletype': 'table*'})</span> <span class="sd"> * col_align : Alignment of columns</span> <span class="sd"> If not present all columns will be centered.</span> <span class="sd"> * caption : Table caption (string or list of strings)</span> <span class="sd"> This will appear above the table as it is the standard in</span> <span class="sd"> many scientific publications. If you prefer a caption below</span> <span class="sd"> the table, just write the full LaTeX command as</span> <span class="sd"> ``latexdict['tablefoot'] = r'\caption{My table}'``</span> <span class="sd"> * preamble, header_start, header_end, data_start, data_end, tablefoot: Pure LaTeX</span> <span class="sd"> Each one can be a string or a list of strings. These strings</span> <span class="sd"> will be inserted into the table without any further</span> <span class="sd"> processing. See the examples below.</span> <span class="sd"> * units : dictionary of strings</span> <span class="sd"> Keys in this dictionary should be names of columns. If</span> <span class="sd"> present, a line in the LaTeX table directly below the column</span> <span class="sd"> names is added, which contains the values of the</span> <span class="sd"> dictionary. Example::</span> <span class="sd"> from astropy.io import ascii</span> <span class="sd"> data = {'name': ['bike', 'car'], 'mass': [75,1200], 'speed': [10, 130]}</span> <span class="sd"> ascii.write(data, Writer=ascii.Latex,</span> <span class="sd"> latexdict = {'units': {'mass': 'kg', 'speed': 'km/h'}})</span> <span class="sd"> If the column has no entry in the `units` dictionary, it defaults</span> <span class="sd"> to `' '`.</span> <span class="sd"> Run the following code to see where each element of the</span> <span class="sd"> dictionary is inserted in the LaTeX table::</span> <span class="sd"> from astropy.io import ascii</span> <span class="sd"> data = {'cola': [1,2], 'colb': [3,4]}</span> <span class="sd"> ascii.write(data, Writer=ascii.Latex, latexdict=ascii.latex.latexdicts['template'])</span> <span class="sd"> Some table styles are predefined in the dictionary</span> <span class="sd"> ``ascii.latex.latexdicts``. The following generates in table in</span> <span class="sd"> style preferred by A&A and some other journals::</span> <span class="sd"> ascii.write(data, Writer=ascii.Latex, latexdict=ascii.latex.latexdicts['AA'])</span> <span class="sd"> As an example, this generates a table, which spans all columns</span> <span class="sd"> and is centered on the page::</span> <span class="sd"> ascii.write(data, Writer=ascii.Latex, col_align='|lr|',</span> <span class="sd"> latexdict={'preamble': r'\begin{center}',</span> <span class="sd"> 'tablefoot': r'\end{center}',</span> <span class="sd"> 'tabletype': 'table*'})</span> <span class="sd"> **caption** : Set table caption</span> <span class="sd"> Shorthand for::</span> <span class="sd"> latexdict['caption'] = caption</span> <span class="sd"> **col_align** : Set the column alignment.</span> <span class="sd"> If not present this will be auto-generated for centered</span> <span class="sd"> columns. Shorthand for::</span> <span class="sd"> latexdict['col_align'] = col_align</span> <span class="sd"> '''</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_latex_commands</span> <span class="o">=</span> <span class="p">[</span><span class="s">'hline'</span><span class="p">,</span> <span class="s">'vspace'</span><span class="p">,</span> <span class="s">'tableline'</span><span class="p">],</span> <span class="n">latexdict</span> <span class="o">=</span> <span class="p">{},</span> <span class="n">caption</span> <span class="o">=</span><span class="s">''</span><span class="p">,</span> <span class="n">col_align</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span> <span class="n">core</span><span class="o">.</span><span class="n">BaseReader</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">LatexHeader</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">LatexData</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">LatexSplitter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">LatexSplitter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="p">{}</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'table'</span> <span class="c"># The latex dict drives the format of the table and needs to be shared</span> <span class="c"># with data and header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'table'</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">latexdict</span><span class="p">)</span> <span class="k">if</span> <span class="n">caption</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'caption'</span><span class="p">]</span> <span class="o">=</span> <span class="n">caption</span> <span class="k">if</span> <span class="n">col_align</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'col_align'</span><span class="p">]</span> <span class="o">=</span> <span class="n">col_align</span> <span class="bp">self</span><span class="o">.</span><span class="n">ignore_latex_commands</span> <span class="o">=</span> <span class="n">ignore_latex_commands</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="s">'%|'</span> <span class="o">+</span> <span class="s">'|'</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">r'</span><span class="se">\\</span><span class="s">'</span> <span class="o">+</span> <span class="n">command</span> <span class="k">for</span> <span class="n">command</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ignore_latex_commands</span><span class="p">])</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <div class="viewcode-block" id="Latex.write"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.latex.Latex.html#astropy.io.ascii.latex.Latex.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">start_line</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">return</span> <span class="n">core</span><span class="o">.</span><span class="n">BaseReader</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">)</span> </div></div> <span class="k">class</span> <span class="nc">AASTexHeader</span><span class="p">(</span><span class="n">LatexHeader</span><span class="p">):</span> <span class="sd">'''In a `deluxetable` some header keywords differ from standard LaTeX.</span> <span class="sd"> This header is modified to take that into account.</span> <span class="sd"> '''</span> <span class="n">header_start</span> <span class="o">=</span> <span class="s">r'\tablehead'</span> <span class="k">def</span> <span class="nf">start_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">return</span> <span class="n">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="s">r'\tablehead'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="s">'col_align'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'col_align'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">)</span> <span class="o">*</span> <span class="s">'c'</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\begin{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">+</span> <span class="s">r'}{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'col_align'</span><span class="p">]</span> <span class="o">+</span> <span class="s">r'}'</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'preamble'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="k">if</span> <span class="s">'caption'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\tablecaption{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'caption'</span><span class="p">]</span> <span class="o">+</span><span class="s">'}'</span><span class="p">)</span> <span class="n">tablehead</span> <span class="o">=</span> <span class="s">' & '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">r'\colhead{'</span> <span class="o">+</span> <span class="n">x</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">'}'</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">])</span> <span class="k">if</span> <span class="s">'units'</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span> <span class="n">tablehead</span> <span class="o">+=</span> <span class="s">r'</span><span class="se">\\</span><span class="s"> '</span> <span class="o">+</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">splitter</span><span class="o">.</span><span class="n">join</span><span class="p">([</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'units'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">' '</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cols</span><span class="p">]))</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\tablehead{'</span> <span class="o">+</span> <span class="n">tablehead</span> <span class="o">+</span> <span class="s">'}'</span><span class="p">)</span> <span class="k">class</span> <span class="nc">AASTexData</span><span class="p">(</span><span class="n">LatexData</span><span class="p">):</span> <span class="sd">'''In a `deluxetable` the data is enclosed in `\startdata` and `\enddata`</span> <span class="sd"> '''</span> <span class="n">data_start</span> <span class="o">=</span> <span class="s">r'\startdata'</span> <span class="n">data_end</span> <span class="o">=</span> <span class="s">r'\enddata'</span> <span class="k">def</span> <span class="nf">start_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="k">return</span> <span class="n">find_latex_line</span><span class="p">(</span><span class="n">lines</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_start</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">):</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_start</span><span class="p">)</span> <span class="n">core</span><span class="o">.</span><span class="n">BaseData</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data_end</span><span class="p">)</span> <span class="n">add_dictval_to_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">,</span> <span class="s">'tablefoot'</span><span class="p">,</span> <span class="n">lines</span><span class="p">)</span> <span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">r'\end{'</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">+</span> <span class="s">r'}'</span><span class="p">)</span> <span class="k">class</span> <span class="nc">AASTexHeaderSplitter</span><span class="p">(</span><span class="n">LatexSplitter</span><span class="p">):</span> <span class="sd">'''extract column names from a `deluxetable`</span> <span class="sd"> This splitter expects the following LaTeX code **in a single line**:</span> <span class="sd"> \tablehead{\colhead{col1} & ... & \colhead{coln}}</span> <span class="sd"> '''</span> <span class="k">def</span> <span class="nf">process_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span> <span class="sd">"""extract column names from tablehead</span> <span class="sd"> """</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'%'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">r'\tablehead'</span><span class="p">,</span><span class="s">''</span><span class="p">)</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">if</span> <span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span><span class="s">'{'</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">line</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">'}'</span><span class="p">):</span> <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="n">core</span><span class="o">.</span><span class="n">InconsistentTableError</span><span class="p">(</span><span class="s">r'\tablehead is missing {}'</span><span class="p">)</span> <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">r'\colhead'</span><span class="p">,</span><span class="s">''</span><span class="p">)</span> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vals</span><span class="p">):</span> <span class="k">return</span> <span class="s">' & '</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">r'\colhead{'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="s">'}'</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">vals</span><span class="p">])</span> <div class="viewcode-block" id="AASTex"><a class="viewcode-back" href="../../../../_generated/astropy.io.ascii.latex.AASTex.html#astropy.io.ascii.latex.AASTex">[docs]</a><span class="k">class</span> <span class="nc">AASTex</span><span class="p">(</span><span class="n">Latex</span><span class="p">):</span> <span class="sd">'''Write and read AASTeX tables.</span> <span class="sd"> This class implements some AASTeX specific commands.</span> <span class="sd"> AASTeX is used for the AAS (American Astronomical Society)</span> <span class="sd"> publications like ApJ, ApJL and AJ.</span> <span class="sd"> It derives from the ``Latex`` reader and accepts the same</span> <span class="sd"> keywords. However, the keywords ``header_start``, ``header_end``,</span> <span class="sd"> ``data_start`` and ``data_end`` in ``latexdict`` have no effect.</span> <span class="sd"> '''</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="n">Latex</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">AASTexHeader</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">AASTexData</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="s">'%|'</span> <span class="o">+</span> <span class="s">'|'</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">r'</span><span class="se">\\</span><span class="s">'</span> <span class="o">+</span> <span class="n">command</span> <span class="k">for</span> <span class="n">command</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ignore_latex_commands</span><span class="p">])</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">AASTexHeaderSplitter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">splitter</span> <span class="o">=</span> <span class="n">LatexSplitter</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">comment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">comment</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span><span class="p">[</span><span class="s">'tabletype'</span><span class="p">]</span> <span class="o">=</span> <span class="s">'deluxetable'</span> <span class="c"># The latex dict drives the format of the table and needs to be shared</span> <span class="c"># with data and header</span> <span class="bp">self</span><span class="o">.</span><span class="n">header</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">latex</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">latex</span></div> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"><h3>Page Contents</h3> </div> </div> <div class="clearer"></div> </div> <footer class="footer"> <p class="pull-right"> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>