Customizing output

Pweave has several output formats and you can customize the output with chunk options. However you may want to customize the output for different purposes.

The simplest form of customization is to update the format dictionary of an existing format. It sets chunk delimiters, output extension and figure format and width.

You can do this easily with Pweb class. Below is a small demonstration using ReST Pweave document ma.mdw.

Let’s start by creating an instance of Pweb class with markdown document:

from pweave import *
from pprint import pprint
doc = Pweb('ma.mdw', doctype = "pandoc")
---------------------------------------------------------------------------FileNotFoundError
Traceback (most recent call last)~/anaconda3/lib/python3.6/site-
packages/pweave/readers.py in read_file_or_url(source)
     15     try:
---> 16         codefile = io.open(source, 'r', encoding='utf-8')
     17         contents = codefile.read()
FileNotFoundError: [Errno 2] No such file or directory: 'ma.mdw'
During handling of the above exception, another exception occurred:
ValueError                                Traceback (most recent call
last)<ipython-input-1-e0491e5b6172> in <module>()
----> 1 doc = Pweb('ma.mdw', doctype = "pandoc")
~/anaconda3/lib/python3.6/site-packages/pweave/pweb.py in
__init__(self, source, doctype, informat, kernel, output, figdir,
mimetype)
     68
     69         self.setformat(doctype)
---> 70         self.read(reader = informat)
     71
     72     def _setwd(self):
~/anaconda3/lib/python3.6/site-packages/pweave/pweb.py in read(self,
string, basename, reader)
    106
    107         if string is None:
--> 108             self.reader = Reader(file=self.source)
    109         else:
    110             self.reader = self.Reader(string=string)
~/anaconda3/lib/python3.6/site-packages/pweave/readers.py in
__init__(self, file, string)
     36         # Get input from string or
     37         if file is not None:
---> 38             self.rawtext = read_file_or_url(self.source)
     39         else:
     40             self.rawtext = string
~/anaconda3/lib/python3.6/site-packages/pweave/readers.py in
read_file_or_url(source)
     18         codefile.close()
     19     except IOError:
---> 20         r = request.urlopen(source)
     21         contents = r.read().decode("utf-8")
     22         r.close()
~/anaconda3/lib/python3.6/urllib/request.py in urlopen(url, data,
timeout, cafile, capath, cadefault, context)
    221     else:
    222         opener = _opener
--> 223     return opener.open(url, data, timeout)
    224
    225 def install_opener(opener):
~/anaconda3/lib/python3.6/urllib/request.py in open(self, fullurl,
data, timeout)
    509         # accept a URL or a Request object
    510         if isinstance(fullurl, str):
--> 511             req = Request(fullurl, data)
    512         else:
    513             req = fullurl
~/anaconda3/lib/python3.6/urllib/request.py in __init__(self, url,
data, headers, origin_req_host, unverifiable, method)
    327                  origin_req_host=None, unverifiable=False,
    328                  method=None):
--> 329         self.full_url = url
    330         self.headers = {}
    331         self.unredirected_hdrs = {}
~/anaconda3/lib/python3.6/urllib/request.py in full_url(self, url)
    353         self._full_url = unwrap(url)
    354         self._full_url, self.fragment =
splittag(self._full_url)
--> 355         self._parse()
    356
    357     @full_url.deleter
~/anaconda3/lib/python3.6/urllib/request.py in _parse(self)
    382         self.type, rest = splittype(self._full_url)
    383         if self.type is None:
--> 384             raise ValueError("unknown url type: %r" %
self.full_url)
    385         self.host, self.selector = splithost(rest)
    386         if self.host:
ValueError: unknown url type: 'ma.mdw'

Have a look at what the format dictionary contains:

pprint(doc.getformat())
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<ipython-input-1-0146554762a5> in
<module>()
----> 1 pprint(doc.getformat())
NameError: name 'doc' is not defined

The names of the dictionary elements are hopefully self explanatory. You’ll notice that you can specify start and end tag for code, results and term as well as block indent.

You can change the formats using Pweb.updateformat() method. Let’s set the default figure width to 10cm and figure format to pdf and figfmt specifies what format is used in the output.

doc.updateformat({'width' : '10cm', 'figfmt' : '.pdf'})
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<ipython-input-1-e59441017877> in
<module>()
----> 1 doc.updateformat({'width' : '10cm', 'figfmt' : '.pdf'})
NameError: name 'doc' is not defined

And after setting options weave and tangle the document:

doc.weave()
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<ipython-input-1-18a81aa32e9d> in
<module>()
----> 1 doc.weave()
NameError: name 'doc' is not defined
doc.tangle()
---------------------------------------------------------------------------NameError
Traceback (most recent call last)<ipython-input-1-2e870fa03a3a> in
<module>()
----> 1 doc.tangle()
NameError: name 'doc' is not defined

View this page as Pweave document .