Improve book reports

This commit is contained in:
Augusto Gunsch 2022-02-13 18:15:30 -03:00
parent b6e8167e2e
commit bcbb7406f1
4 changed files with 120 additions and 13 deletions

25
bookreport.cls Normal file
View File

@ -0,0 +1,25 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{bookreport}[2022/3/12 Book Report]
\LoadClass{article}
\usepackage{iflang}
\usepackage[margin=1in]{geometry}
\renewcommand{\maketitle}{
\IfLanguageName{portuguese}
{
\noindent\large
Título: \hfill \@title\\
Autor: \hfill \@author\\
Data da Ficha: \hfill \@date\\
\rule{\textwidth}{0.4pt}
}
{
\noindent\large
Title: \hfill \@title\\
Author: \hfill \@author\\
Report Date: \hfill \@date\\
\rule{\textwidth}{0.4pt}
}
}

View File

@ -7,7 +7,11 @@ from html.parser import HTMLParser
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
import sys
if len(sys.argv) > 1 and 'clean' not in sys.argv:
print('usage: %s [clean]' % sys.argv[0])
exit(1)
class CodeHighlighter(HTMLParser):
data = ''
@ -64,14 +68,19 @@ outroot = 'out'
output = 'Files'
templates = 'templates'
shutil.rmtree(outroot, ignore_errors=True)
os.mkdir(outroot)
shutil.copy(templates + '/stylesheet.css', outroot + '/stylesheet.css')
shutil.copy(templates + '/highlight.css', outroot + '/highlight.css')
shutil.copy(templates + '/cabinet.png', outroot + '/cabinet.png')
shutil.copy(templates + '/jquery.js', outroot + '/jquery.js')
shutil.copytree(templates + '/mathjax', outroot + '/mathjax')
shutil.copytree(templates + '/bootstrap', outroot + '/bootstrap')
if 'clean' in sys.argv:
shutil.rmtree(outroot, ignore_errors=True)
try:
os.mkdir(outroot)
shutil.copy(templates + '/stylesheet.css', outroot + '/stylesheet.css')
shutil.copy(templates + '/highlight.css', outroot + '/highlight.css')
shutil.copy(templates + '/cabinet.png', outroot + '/cabinet.png')
shutil.copy(templates + '/jquery.js', outroot + '/jquery.js')
shutil.copytree(templates + '/mathjax', outroot + '/mathjax')
shutil.copytree(templates + '/bootstrap', outroot + '/bootstrap')
except:
pass
with open(templates + '/file.html', 'r') as template:
@ -101,8 +110,44 @@ class File:
self.root_reference = re.sub(r'.+?/', '../', outdir)
self.root_reference = re.sub(r'/[^\.]+$', '/', self.root_reference)
self.content = subprocess.check_output(['pandoc', '--mathjax=templates/mathjax/es5/tex-mml-chtml.js', '-f', 'latex', '-t', 'html',
'%s/%s' % (root, name)]).decode()
path = '%s/%s' % (root, name)
with open(path, 'r') as f:
content = f.read()
m = re.findall(r'\\selectlanguage\{(.*?)\}', content)
if not m:
m = re.findall(r'\\usepackage\[(.*?)\]\{babel\}', content)
if not m:
m = re.findall(r'\\documentclass\[(.*?)\]\{.*\}', content)
lang = m[0] if len(m) > 0 else 'english'
m = re.findall(r'\\documentclass\{(.*?)\}', content)
doc_class = m[0] if len(m) > 0 else 'article'
options = [
'pandoc',
'--mathjax=templates/mathjax/es5/tex-mml-chtml.js',
'-f', 'latex',
'-t', 'html',
path
]
if doc_class == 'bookreport':
options.append('-s')
options.append('--template')
options.append('templates/default.html')
self.content = subprocess.check_output(options).decode()
if doc_class == 'bookreport':
if lang == 'portuguese':
self.content = re.sub(r'!\*\*title\*\*!', 'Título', self.content)
self.content = re.sub(r'!\*\*author\*\*!', 'Autor', self.content)
self.content = re.sub(r'!\*\*date\*\*!', 'Data da Ficha', self.content)
else:
self.content = re.sub(r'!\*\*title\*\*!', 'Title', self.content)
self.content = re.sub(r'!\*\*author\*\*!', 'Author', self.content)
self.content = re.sub(r'!\*\*date\*\*!', 'Report Date', self.content)
def expand_html(self):
title = self.basename.replace('_', ' ')
@ -125,13 +170,18 @@ class File:
f.write(html_content)
def write_pdf(self):
subprocess.run(['latexmk', '-pdf', '-outdir=%s' % self.outdir, self.input_path])
subprocess.run(['latexmk', '-shell-escape', '-pdf', '-outdir=%s' % self.outdir, self.input_path])
subprocess.run(['latexmk', '-c', '-outdir=%s' % self.outdir, self.input_path])
def write(self):
self.write_html()
self.write_pdf()
html = self.outdir + '/' + self.html
pdf = self.outdir + '/' + self.pdf
input_time = os.path.getmtime(self.input_path)
if not os.path.isfile(html) or input_time > os.path.getmtime(html):
self.write_html()
if not os.path.isfile(pdf) or input_time > os.path.getmtime(pdf):
self.write_pdf()
toc = '<ul>'

28
templates/default.html Normal file
View File

@ -0,0 +1,28 @@
<style>
#meta {
width: 100%;
font-size: 1.3em;
}
#meta td:nth-child(2) {
text-align: right;
}
</style>
<table id="meta">
<tr>
<td>!**title**!:</td> <td>$title$</td>
</tr>
<tr>
<td>!**author**!:</td> <td>$author$</td>
</tr>
<tr>
<td>!**date**!:</td> <td>$date$</td>
</tr>
</table>
<hr>
<article>
$body$
</article>

View File

@ -73,6 +73,10 @@ main {
margin-bottom: 1rem;
}
.linenos {
width: 20px;
}
.highlight {
background-color: #111;
padding: .2em .5em;