Beispiel #1
0
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
Beispiel #2
0
	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"]])]