Import into git
This commit is contained in:
commit
cac75edaa0
2 changed files with 305 additions and 0 deletions
143
md2tex
Executable file
143
md2tex
Executable file
|
@ -0,0 +1,143 @@
|
|||
#!/usr/bin/awk -f
|
||||
BEGIN {
|
||||
headed = 0
|
||||
stack_pos = 0
|
||||
tag("documentclass[a4paper]{article}")
|
||||
# tag("special{papersize=210mm,297mm}")
|
||||
tag("usepackage[margin=1in]{geometry}")
|
||||
tag("usepackage{listings}")
|
||||
tag("lstset{basicstyle=\\ttfamily\\footnotesize,breaklines=true}")
|
||||
tag("usepackage{hyperref}")
|
||||
tag("usepackage{graphicx}")
|
||||
tag("sloppy")
|
||||
tag("parindent0mm")
|
||||
}
|
||||
|
||||
function tag(val) {
|
||||
printf("\\%s\n", val)
|
||||
}
|
||||
|
||||
function push(what, arg) {
|
||||
stack[stack_pos++] = what;
|
||||
tag("begin{" what "}" arg)
|
||||
}
|
||||
|
||||
function peek() {
|
||||
return stack[stack_pos-1]
|
||||
}
|
||||
|
||||
function pop() {
|
||||
tag("end{" stack[--stack_pos] "}")
|
||||
}
|
||||
|
||||
function inline(text) {
|
||||
gsub(/\\/, "\\textbackslash ", text)
|
||||
gsub(/\{/, "\\{", text)
|
||||
gsub(/\}/, "\\}", text)
|
||||
gsub(/~/, "\\textasciitilde ", text)
|
||||
gsub(/\$/, "\\$", text)
|
||||
gsub(/_/, "\\_", text)
|
||||
gsub(/#/, "\\#", text)
|
||||
gsub(/%/, "\\%", text)
|
||||
gsub(/&/, "\\&", text)
|
||||
gsub(/\^/, "\\textasciicircum ", text)
|
||||
gsub(/\.{3,}/, "\\ldots", text)
|
||||
text = gensub(/\*\*([^\*]*)\*\*/, "\\textbf{\\1}", "g", text)
|
||||
text = gensub(/\*([^\*]*)\*/, "\\emph{\\1}", "g", text)
|
||||
text = gensub(/`([^`]*)`/, "\\texttt{\\1}", "g", text)
|
||||
# links
|
||||
text = gensub(/\[(.*)\]\((.*)\)/, "\\href{\\2}{\\1}\\footnote{\\url{\\2}}", "g", text)
|
||||
return text
|
||||
}
|
||||
|
||||
/^---$/ {
|
||||
parse_meta = !parse_meta
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if(parse_meta) {
|
||||
split($0, r, ": ")
|
||||
gsub(/(^"|"$)/, "", r[2])
|
||||
meta[r[1]]=r[2]
|
||||
next
|
||||
}
|
||||
}
|
||||
|
||||
/^# / {
|
||||
gsub(/^#* /, "", $0)
|
||||
if (!meta["title"]) meta["title"] = $0
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if (!headed) {
|
||||
if (meta["title"]) tag("title{" meta["title"] "}")
|
||||
if (meta["author"]) tag("author{" meta["author"] "}")
|
||||
push("document")
|
||||
tag("maketitle")
|
||||
headed = 1
|
||||
}
|
||||
}
|
||||
|
||||
/^## / {
|
||||
gsub(/^#* /, "", $0)
|
||||
tag("section{" $0 "}")
|
||||
next
|
||||
}
|
||||
|
||||
/^### / {
|
||||
gsub(/^#* /, "", $0)
|
||||
tag("subsection{" $0 "}")
|
||||
next
|
||||
}
|
||||
|
||||
/^```$/ {
|
||||
if (peek() == "lstlisting") {
|
||||
pop()
|
||||
} else {
|
||||
push("lstlisting")
|
||||
}
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
if (peek() == "lstlisting") {
|
||||
print($0)
|
||||
next
|
||||
}
|
||||
}
|
||||
|
||||
/^$/ {
|
||||
while(peek() && peek() != "document") pop()
|
||||
}
|
||||
|
||||
/^!\[.*\]\(.*\)$/ {
|
||||
txt = $0
|
||||
filenam = $0
|
||||
gsub(/(^!\[|\].*$)/, "", txt)
|
||||
gsub(/(^!.*\(|\)$)/, "", filenam)
|
||||
gsub(/\.(jpg|png|gif|jpeg)$/, "", filenam)
|
||||
push("figure")
|
||||
tag("includegraphics[width=\\textwidth]{" filenam "}")
|
||||
tag("caption{" inline(txt) "}")
|
||||
next
|
||||
}
|
||||
|
||||
/^- / {
|
||||
gsub(/^- /, "", $0)
|
||||
if (peek() != "itemize") push("itemize")
|
||||
tag("item")
|
||||
print(inline($0))
|
||||
next
|
||||
}
|
||||
|
||||
{
|
||||
print(inline($0))
|
||||
}
|
||||
|
||||
END {
|
||||
while (peek()) {
|
||||
pop()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue