def _author(tag, parent): result = latex.Cmd("author") process_usr(tag, result, parent, True) result.args = [latex.Cmd("IEEEauthorblockA")] process_usr(tag, result.args[0], result, True) result.args[0].args = tolatex(tag.content, result.args[0]) return result
def figure2latex(tag, parent): width = None if "style" in tag.attrs and tag.attrs["style"]: width = tag.attrs["style"].get("width") if not width: width = tag.attrs["style"].get("max-width") if "%" in width: width = float(width[0:-1])/100.0 else: width = None figure = latex.Env("figure", args=[("ht!",)]) process_usr(tag, figure, parent) if width: if 'width' in figure.usr: figure.usr['width'] *= width else: figure.usr['width'] = width figure << latex.Cmd("centering") figure << latex.Cmd("advance\\leftskip-1cm") figure << latex.Cmd("advance\\rightskip-1cm") figure << tolatex(tag.content, figure) if 'id' in tag.attrs: figure << latex.Cmd("label", args=[tag.attrs['id']], inline=True) latex_figures.append(tag.attrs['id']) if tag.attrs['id'] in latex_unresolved: for elem in latex_unresolved[tag.attrs['id']]: elem.content = ["Fig. "] + elem.content del latex_unresolved[tag.attrs['id']] else: latex_figures.append('') return figure
def dt2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("item", [(latex.Group(tolatex(tag.content, result)),)], inline=True) result << latex.Cmd("hfill", inline=True) result << latex.Cmd("\\", inline=True) return result
def _listOfAbbreviations(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << "{" result << latex.Cmd("listspacing", ["abbr"]) result << latex.Cmd("printglossary", [("style=list,title=List Of Abbreviations",)]) result << "}" return result
def _copyright(tag, parent): copy = tag.content[0].split(' ') year = copy[1] name = ' '.join(copy[2:]) result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("copyrightholder", [name]) result << latex.Cmd("copyrightyear", [year]) result << latex.Cmd("makecopyright") return result
def td2latex(tag, parent): result = None if "colspan" in tag.attrs: result = latex.Cmd("multicolumn", [int(tag.attrs["colspan"]), "c"], inline=True) cell = latex.Cmd("makecell", inline=True) process_usr(tag, cell, parent) cell.args = [latex.Group(tolatex(tag.content, cell))] if result is not None: result.args.append(cell) return result else: return cell
def _conclusion(tag, parent): result = latex.Group() result << latex.Cmd("conclusion") process_usr(tag, result, parent) result.usr['skip'] = ['h1'] result << tolatex(tag.content, result) return result
def i2latex(tag, parent): result = latex.Cmd("emph", inline=True) process_usr(tag, result, parent, True) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def _title(tag, parent): result = latex.Cmd("title") process_usr(tag, result, parent) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def thead2latex(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) result.usr["thead"] = True result << tolatex(tag.content, result) result << latex.Cmd("hline") return result
def _appendix(tag, parent): result = latex.Group() if not hasattr(_appendix, 'first'): result << latex.Cmd("appendix") _appendix.first = True process_usr(tag, result, parent) result << tolatex(tag.content, result) return result
def a2latex(tag, parent): if "href" in tag.attrs: href = tag.attrs["href"] if len(href) > 0 and href[0] == "#": if "#" in href[1:]: result = latex.Cmd("cite", [], inline=True) process_usr(tag, result, parent, True) rng = href[1:].split('-#') if rng[0] in latex_citations and rng[1] in latex_citations: result.args = [','.join(latex_citations[latex_citations.index(rng[0]):latex_citations.index(rng[1])+1])] elif href[1:] in latex_citations: result = latex.Cmd("cite", [escape_ref(href[1:])], inline=True) process_usr(tag, result, parent, True) elif href[1:] in latex_figures: result = latex.Group() process_usr(tag, result, parent, True) result << "Fig. " result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) elif href[1:] in latex_tables: result = latex.Group() process_usr(tag, result, parent, True) result << "Table. " result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) elif tag.content: result = latex.Cmd("hyperref", [(escape_ref(href[1:]),)], inline=True) process_usr(tag, result, parent, True) result.args.append(latex.Group(tolatex(tag.content, parent))) elif href[1:] not in latex_unresolved: result = latex.Group() process_usr(tag, result, parent, True) result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) latex_unresolved[href[1:]] = [result] else: result = latex.Group() process_usr(tag, result, parent, True) result << latex.Cmd("ref", [escape_ref(href[1:])], inline=True) latex_unresolved[href[1:]].append(result) return result else: result = latex.Cmd("href", [escape_ref(href)], inline=True) process_usr(tag, result, parent, True) result.args.append(latex.Group(tolatex(tag.content, parent))) return result elif "name" in tag.attrs: name = tag.attrs["name"] result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, parent) result << latex.Cmd("label", args=[name], inline=True) return result return latex.Group(tolatex(tag.content, parent))
def code2latex(tag, parent): lang = get_lang(tag, parent) if "pre" in parent.usr: page = latex.Env("minipage", args=[latex.Group(["0.95", latex.Cmd("linewidth", inline=True)])], inline=False) process_usr(tag, page, parent) result = latex.Env("lstlisting", args=[("mathescape",)]) process_usr(tag, result, parent) result << convert_code(tag.content, lang, "arg" in parent.usr) page << result pre = latex.Group() pre << latex.Cmd("newbox", ["\\mybox"]) box = latex.Env("lrbox", ["\\mybox"]) box << latex.Cmd("noindent") box << page pre << box pre << latex.Cmd("colorbox", ["code_bg", latex.Cmd("usebox", [latex.Cmd("mybox")])]) return pre else: #color = latex.Cmd("colorbox", ["code_bg"], inline=True) result = latex.Cmd("protect\\lstinline", args=[("mathescape, columns=fixed",)], inline=True, d_open=u'!', d_close=u'!') process_usr(tag, result, parent) group = latex.Group() process_usr(tag, group, result) group << convert_code(tag.content, lang, "arg" in parent.usr).replace('\n', ' ') result.args.append(group) #color.args.append(result) return result #color
def cite2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) if "id" in tag.attrs: latex_citations.append(tag.attrs["id"]) result << latex.Cmd("bibitem", [tag.attrs["id"]]) result << tolatex(tag.content, result) result << "\n" return result
def abbr2latex(tag, parent): result = latex.Group() aid = ''.join(str(x) for x in tag.content) if "title" in tag.attrs and tag.attrs["title"]: latex_abbr[aid] = remove_linebreaks(tag.attrs["title"]) result << latex.Cmd("gls", [aid.lower()]) else: result << aid return result
def _appendix(tag, parent): result = latex.Group() process_usr(tag, result, parent) if 'skip' in result.usr and result.usr['skip']: result.usr['skip'].append('h1') else: result.usr['skip'] = ['h1'] result << latex.Cmd("appendix") result << tolatex(tag.content, result) return result
def _header(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) if 'skip' in result.usr and result.usr['skip']: result.usr['skip'].append('p') else: result.usr['skip'] = ['p'] result << tolatex(tag.content, result) result << latex.Cmd("maketitle") return result
def _title(tag, parent): title = "" author = "" conferral = "" for elem in tag.content: if isinstance(elem, html.Tag): if "class" in elem.attrs: titlecls = elem.attrs["class"].split() if "title" in titlecls: title = elem.content[0].strip() elif "author" in titlecls: author = elem.content[2].strip() conferral = elem.content[4].strip().split() result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("title", [title]) result << latex.Cmd("author", [author]) result << latex.Cmd("conferraldate", conferral) result << latex.Cmd("degreefield", ["Ph.D."]) result << latex.Cmd("maketitle") return result
def em2latex(tag, parent): if "abstract" in parent.usr: result = latex.Group() process_usr(tag, result, parent) result << tolatex(tag.content, result) return result else: result = latex.Cmd("textit", inline=True) process_usr(tag, result, parent, True) result.args = [latex.Group()] process_usr(tag, result.args[0], result) result.args[0] << tolatex(tag.content, result.args[0]) return result
def table2latex(tag, parent): cnt = [] cap = None for elem in tag.content: if isinstance(elem, html.Tag) and elem.name == "caption": cap = elem else: cnt.append(elem) result = latex.Env("table", args=[("ht!",)]) process_usr(tag, result, parent) table = latex.Env("tabular") cols = 0 for td in tag["tr"][0].content: if isinstance(td, html.Tag): if "colspan" in td.attrs: cols += int(td.attrs["colspan"]) else: cols += 1 table.args = [" | ".join(["c" for _ in range(0, cols)])] process_usr(tag, table, result) table << tolatex(cnt, table) result << latex.Cmd("small") result << latex.Cmd("centering") result << table if cap is not None: result << tolatex(cap, result) if 'id' in tag.attrs: result << latex.Cmd("label", args=[tag.attrs['id']], inline=True) latex_tables.append(tag.attrs["id"]) if tag.attrs['id'] in latex_unresolved: for elem in latex_unresolved[tag.attrs['id']]: elem.content = ["Tbl. "] + elem.content del latex_unresolved[tag.attrs['id']] return result
def _preface(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("preface") result.usr['skip'] = ['h1'] result << tolatex(tag.content, result) result << latex.Cmd("normalspacing") result << latex.Cmd("setcounter", ["page", 1]) result << latex.Cmd("pagenumbering", ["arabic"]) result << latex.Cmd("pagestyle", ["cornell"]) result << latex.Cmd("addtolength", ["\\parskip", "0.5\\baselineskip"]) return result
def hN2latex(tag, parent): global cfg index = int(tag.name[1:]) result = latex.Group() section = latex.Section("", index+cfg['section']) process_usr(tag, section, parent) if 'pass' in section.usr: section.usr['pass'].append('a') else: section.usr['pass'] = ['a'] section.args = [latex.Group()] process_usr(tag, section.args[0], section) section.args[0] << tolatex([tag.content[0]], section.args[0]) result << section if isinstance(tag.content[0], html.Tag) and tag.content[0].name == "a" and "name" in tag.content[0].attrs: result << latex.Cmd("label", [tag.content[0].attrs["name"]]) return result
def _listOfTables(tag, parent): result = latex.Cmd("tablelistpage") process_usr(tag, result, parent) return result
def _listOfFigures(tag, parent): result = latex.Cmd("figurelistpage") process_usr(tag, result, parent) return result
def _tableOfContents(tag, parent): result = latex.Cmd("contentspage") process_usr(tag, result, parent) return result
def li2latex(tag, parent): result = latex.Group() process_usr(tag, result, parent) result << latex.Cmd("item ", inline=True) result << tolatex(tag.content, result) return result
def caption2latex(tag, parent): result = latex.Cmd("caption") process_usr(tag, result, parent, True) result.args = [latex.Group(tolatex(tag.content, result))] return result
def header2latex(tag, parent): result = latex.Group([], "\n") process_usr(tag, result, parent) result << tolatex(tag.content, result) result << latex.Cmd("maketitle") return result
def img2latex(tag, parent): if "src" in tag.attrs: src = tag.attrs["src"] path = os.path.dirname(src) outsrc = os.path.join(latex_outpath, src) if not os.path.exists(os.path.dirname(outsrc)): try: os.makedirs(os.path.dirname(outsrc)) except OSError as exc: # Guard against race condition if exc.errno != errno.EEXIST: raise if ".svg" in src: width = 1.0 if 'width' in parent.usr: width = parent.usr['width'] if "style" in tag.attrs and tag.attrs["style"]: attr = tag.attrs["style"].get("width") if not attr: attr = tag.attrs["style"].get("max-width") if "," in attr: width *= float(attr[attr.index(",")+1:-2])/100.0 elif "%" in attr: width *= float(attr[0:-1])/100.0 outsrc = outsrc.replace(".svg", ".pdf") intime = os.path.getmtime(src) if os.path.exists(src) else 0 outtime = os.path.getmtime(outsrc) if os.path.exists(outsrc) else 0 if intime > outtime: print("inkscape -D -z --file=\"" + src + "\" --export-pdf=\"" + outsrc + "\" --export-latex") os.system("inkscape -D -z --file=\"" + src + "\" --export-pdf=\"" + outsrc + "\" --export-latex") src = src.replace(".svg", ".pdf_tex") result = latex.Group() result << latex.Cmd("graphicspath", [path+'/'], d_open='{{', d_close='}}') process_usr(tag, result, parent, True) if width: page = latex.Env("minipage", args=[latex.Group([str(width), latex.Cmd("columnwidth", inline=True)])], inline=True) process_usr(tag, page, parent) page << latex.Cmd("centering", inline=False) page << latex.Cmd("def", inline=True) page << latex.Cmd("svgwidth", args=["\\columnwidth"], inline=False) page << latex.Cmd("input", args=[src]) result << page else: result << latex.Cmd("def", inline=True) result << latex.Cmd("svgwidth", args=["\\columnwidth"], inline=False) result << latex.Cmd("input", args=[src], inline=False) return result else: copyfile(src, outsrc) result = latex.Cmd("includegraphics") process_usr(tag, result, parent, True) result.args = [("width=1.0\\columnwidth",), src] return result else: return default2latex(tag, parent)
print(result, file=fptr) #del latex_path[-1] flag = None paths = [] for arg in sys.argv[1:]: if arg[0] == "-": flag = arg elif flag: if flag == "-o" or flag == "--output": latex_outpath = arg if flag == "-f" or flag == "--format": latex_module = importlib.import_module(arg) cfg.update(latex_module.load(tolatex, process_usr)) flag = None elif "ref" in arg: paths.insert(0, arg) else: paths.append(arg) for path in paths: convert_file(path) if latex_abbr: with open(os.path.join(latex_outpath, "glos.tex"), 'w') as fptr: result = latex.Group() for abbr, desc in latex_abbr.items(): result << latex.Cmd("newglossaryentry", [abbr.lower(), "%\nname={" + abbr + "},%\ndescription={" + desc + "}%\n"]) print(result, file=fptr)