Some sections jumped from level 2 to level 4, for example. Also played around with generating book to HTML. I like it, but it needs some work. The Calico table of content generator cannot deal with different headers with the same name, for example. I want to go to HTML so I can use Bokeh to have interactive plots. But that means no more PDF, because Bokeh will not export to PDF.
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
from __future__ import print_function
|
|
import io
|
|
import IPython.nbformat as nbformat
|
|
import sys
|
|
|
|
|
|
def remove_formatting(nb):
|
|
c = nb['cells']
|
|
for i in range (len(c)):
|
|
if 'input' in c[i].keys():
|
|
if c[i]['input'][0:16] == '#format the book':
|
|
del c[i]
|
|
return
|
|
|
|
|
|
def remove_links(nb):
|
|
c = nb['cells']
|
|
for i in range (len(c)):
|
|
if 'source' in c[i].keys():
|
|
if c[i]['source'][0:19] == '[Table of Contents]':
|
|
del c[i]
|
|
return
|
|
|
|
|
|
def remove_links_add_appendix(nb):
|
|
c = nb['cells']
|
|
for i in range (len(c)):
|
|
if 'source' in c[i].keys():
|
|
if c[i]['source'][0:19] == '[Table of Contents]':
|
|
c[i]['source'] = '\\appendix'
|
|
return
|
|
|
|
|
|
def merge_notebooks(filenames):
|
|
merged = None
|
|
added_appendix = False
|
|
for fname in filenames:
|
|
with io.open(fname, 'r', encoding='utf-8') as f:
|
|
nb = nbformat.read(f, nbformat.NO_CONVERT)
|
|
remove_formatting(nb)
|
|
if not added_appendix and fname[0:8] == 'Appendix':
|
|
remove_links_add_appendix(nb)
|
|
added_appendix = True
|
|
else:
|
|
remove_links(nb)
|
|
if merged is None:
|
|
merged = nb
|
|
else:
|
|
merged.cells.extend(nb.cells)
|
|
#merged.metadata.name += "_merged"
|
|
|
|
print(nbformat.writes(merged, nbformat.NO_CONVERT))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
merge_notebooks(
|
|
['../00_Preface.ipynb',
|
|
'../01_g-h_filter.ipynb',
|
|
'../02_Discrete_Bayes.ipynb',
|
|
'../03_Least_Squares_Filters.ipynb',
|
|
'../04_Gaussians.ipynb',
|
|
'../05_Kalman_Filters.ipynb',
|
|
'../06_Multivariate_Kalman_Filters.ipynb',
|
|
'../07_Kalman_Filter_Math.ipynb',
|
|
'../08_Designing_Kalman_Filters.ipynb',
|
|
'../09_Nonlinear_Filtering.ipynb',
|
|
'../10_Unscented_Kalman_Filter.ipynb',
|
|
'../11_Extended_Kalman_Filters.ipynb',
|
|
'../12_Designing_Nonlinear_Kalman_Filters.ipynb',
|
|
'../13_Smoothing.ipynb',
|
|
'../14_Adaptive_Filtering.ipynb',
|
|
'../15_HInfinity_Filters.ipynb',
|
|
'../16_Ensemble_Kalman_Filters.ipynb',
|
|
'../Appendix_A_Installation.ipynb',
|
|
'../Appendix_B_Symbols_and_Notations.ipynb'])
|