def metadata_to_latex(metadata_define, metadata_request, model, filename): """Create a LaTeX document with a table that lists each variable provided and/or requested. Uses the GMTB LaTeX templates and style definitons in gmtb.sty.""" shading = {0: 'darkgray', 1: 'lightgray'} success = True var_names = sorted( list(set(list(metadata_define.keys()) + list(metadata_request.keys())))) latex = '''\\documentclass[12pt,letterpaper,oneside,landscape]{{scrbook}} \\usepackage{{import}} \\import{{../common/}}{{gmtb.sty}} \\renewcommand{{\\thesection}}{{\\arabic{{section}}}} \\renewcommand{{\\thesubsection}}{{\\arabic{{section}}.\\arabic{{subsection}}}} \\begin{{document}} \\section{{CCPP variables provided by model {model} vs requested by pool of physics}}\\label{{sec_ccpp_variables}} \\subsection{{List of variables}} \\begin{{longtable}}{{l}}'''.format(model=model) for var_name in var_names: if var_name in metadata_define.keys(): var = metadata_define[var_name][0] else: var = metadata_request[var_name][0] line = ''' \hyperlink{{{standard_name_ref}}}{{\\blue\\underline{{\\execout{{{standard_name}}}}}}} \\\\'''.format( standard_name=escape_tex(var.standard_name), standard_name_ref=var.standard_name) latex += line latex += ''' \\end{longtable}\\pagebreak \\subsection{Description of variables} {{\\small\\begin{description} ''' for var_name in var_names: if var_name in metadata_define.keys(): var = metadata_define[var_name][0] target = escape_tex(decode_container(var.container)) local_name = escape_tex(var.local_name) else: var = metadata_request[var_name][0] target = 'MISSING' local_name = 'MISSING' if var_name in metadata_request.keys(): requested_list = [ escape_tex(decode_container(v.container)) for v in metadata_request[var_name] ] # for the purpose of the table, just output the name of the subroutine for i in range(len(requested_list)): entry = requested_list[i] requested_list[i] = entry[entry.find('SUBROUTINE') + len('SUBROUTINE') + 1:] requested = '\\newline '.join(sorted(requested_list)) else: requested = 'NOT REQUESTED' # Create output text = ''' \\begin{{samepage}}\\item{{ \hypertarget{{{standard_name_ref}}}{{\\blue\\exec{{{standard_name}}}}}}}\\\\ \\nopagebreak \\begin{{tabular}}{{ll}} \\execout{{long\_name }} & \\execout{{{long_name} }} \\\\ \\execout{{units }} & \\execout{{{units} }} \\\\ \\execout{{rank }} & \\execout{{{rank} }} \\\\ \\execout{{type }} & \\execout{{{type} }} \\\\ \\execout{{kind }} & \\execout{{{kind} }} \\\\ \\execout{{source }} & \\execout{{{target} }} \\\\ \\execout{{local\_name}} & \\execout{{{local_name} }} \\\\ \\execout{{requested }} & \\execout{{\\vtop{{{requested}}}}} \\\\ \\end{{tabular}} \\vspace{{4pt}} \\end{{samepage}}'''.format(standard_name=escape_tex(var.standard_name), standard_name_ref=var.standard_name, long_name=escape_tex(var.long_name), units=escape_tex(var.units), rank=var.rank.count(':'), type=escape_tex(var.type), kind=escape_tex(var.kind), target=target, local_name=local_name, requested=requested) latex += text # Footer latex += ''' \\end{description}}} \\end{document} ''' filepath = os.path.split(os.path.abspath(filename))[0] if not os.path.isdir(filepath): os.makedirs(filepath) with open(filename, 'w') as f: f.write(latex) logging.info('Metadata table for model {0} written to {1}'.format( model, filename)) return success
content["uidhint"] = " "+content["uid"] if common.drafting() else "" last = True content["name"] = "" for c in pupil["name"] : if c.isupper() and not last : content["name"] += " " + c else : content["name"] += c last = not c.islower() print pupil["uid"] content["name"]=content["name"].upper().replace(u'ß', 'SS') if content["author"] == "": content["author"] = "Dieser Text wurde von ganz vielen geschrieben... " else : content["author"] = common.escape_tex(content["author"]) content["name"]=content["name"].upper() content["name"] = content["name"].replace(ur"ё", '"e').replace(u"Ё", '"E').replace(u"Ề", u"Ê\\hspace{-4mm}\\raisebox{2.5mm}{`}\\hspace{1.5mm}") if content["uid"] in smallnames: content["name"] = "\LARGE "+content["name"] elif content["uid"] in verysmallnames: content["name"] = "\large "+content["name"] if content["g8"]==1 : content["g8"] = "G8" elif content["g8"]==0 : content["g8"] = "G9" elif content["g8"]==2 : content["g8"] = "G8/G9 \\em{fixme}" if content["uid"] in smallmeta : content["metasize"] = "\\small \\vspace*{-1mm}"
course["type"] = "vier" else : course["type"] = "zwei" course["fach"] = course["fach"].upper() course["fach"] = "GK" if course["fach"] == "GEMEINSCHAFTSKUNDE" else course["fach"] course["lehrer"] = course["lehrer"].upper() if course["id"] in course_members: course["members"] = ', '.join([filter(lambda p: p["uid"] == member, pupils)[0]["name"] for member in sorted(course_members[course["id"]])]) else: course["members"] = "FIXME: Wer ist hier drin? "+course["id"] print '%s: No course list (%s)'% (course["id"], removeNonAscii(course["fach"]+" "+course["lehrer"])) p = re.compile('\s\*(.*?)\*', re.VERBOSE) course["text"] = p.sub(r'\\emph{\1}',common.escape_tex(course["text"])) if not os.path.exists('tex/courseclouds/%s.jpg'%course["id"]): print '%s: No course cloud'%course["id"] course["cloud"] = "\\rule{\\textwidth}{90mm}" else: course["cloud"] = "{\\centering \\includegraphics[width=\\textwidth]{courseclouds/%s.jpg}}\\vspace{2mm}"%course["id"] if int(course["num"]) == 4: if os.path.exists('tex/grouppics/%s.jpg'%course["id"]): course["pic"] = "\\includegraphics[width=\\textwidth]{grouppics/%s.jpg}"%course["id"] else: course["pic"] = "\\rule{\\textwidth}{120mm}" print '%s: No course pic (%s)'% (course["id"], removeNonAscii(course["fach"]+" "+course["lehrer"])) else: avas = ["\includegraphics[height=18mm]{processed_peopleavatars/%s.jpg}\\textcolor{white}{\-}"%member for member in sorted(course_members[course["id"]])]