Skip to content

chakravala/VerTeX.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VerTeX.jl

Typeset scattered graph data rewriter based on LaTeX nodes

DOI Build Status Build status Coverage Status codecov.io Liberapay patrons

For now, this project is a prototype concept for maintaining a body of research and citations via a computational graph database. The VerTeX typeset scattered graph data rewriter is based on a new graph data format called VerTeX, which parses and generates LaTeX documents from nodes. Current specifications are concerned with how to construct new documents from theorems and definitions using graph data. This enables research collaborators to maintain databases of LaTeX nodes. The VerTeX julia package automatically parses this database of LaTeX nodes to extract citations and references. This system can also generate graph diagrams depicting the inter-relationships and dependencies of definitions, theorems, calculations, references, and results.

For convenience, the vtx> REPL can be used by pressing the , key with commands such as help,vim,pdf,status,dictionary,ranger,preview,search,cd,cdpkg. The REPL code was adapted and modifed from the REPL code of Pkg.jl using their MIT Julia license.

Requirements

The general API is functional out of the box. To use some of the additional terminal user interface features from the REPL, the following unix-like programs are required:

  • vim for editing nodes as LaTeX documents
  • vimtex plugin for vim for compiling and preview
  • latexmk for compiling LaTeX to PDF formats
  • zathura for viewing PDF output
  • ranger for browsing directories

See some of chakravala's dot files for examples of startup.jl, .vimrc, .latexmkrc, zathurarc.

Serialization of VerTeX node data

The format is not specific to any kind of file extension or way of saving, as the format is defined only by what data is saved. Therefore, VerTeX data can be saved in any type of serializtion format the database maintainer wants to choose.

To start with, the TOML format has been implemented.

An example TOML file generated by VerTeX is

author = "example"
pre = "%vtx:~/.julia/v0.7/JuliaTeX/vtx/default.tex"
revised = "2018-03-06T20:00:25.559"
uuid = "e87e02c0-2178-11e8-1787-d7c816143f3c"
created = "2018-03-06T19:59:41.514"
title = "testing"
editor = "Person Nameson"
date = "2018"
version = ["VerTeX", "v\"0.1.0\""]
tex = "hello world"

These are the main fields for any VerTeX data file:

  • pre is the LaTeX document preamble data (what packages to load, etc)
  • title is the title of the VerTeX file and also the \title{} field from latex doc
  • author is the creator of the content (simultaneously it is \author{} field of latex doc)
  • date is the latex doc \date{} field
  • tex is the main body of the LaTeX content for the VerTeX file
  • uuid is a unique identifier (not necessarily cryptographically secure, but it can be)
  • created is the date of creation of the uuid
  • revised is the last editing date and time UTC
  • editor is the person who was editing the VerTeX file
  • version is the VerTeX version data
  • depot is the repository name

There are more data fields envisioned which are not implemented in the protype yet.

The data from this example TOML file results in the following LaTeX document when combined:

\documentclass[]{article}
\usepackage[active,tightpage]{preview}
\setlength\PreviewBorder{7.77pt}
\usepackage{varwidth}
\AtBeginDocument{\begin{preview}\begin{varwidth}{\linewidth}}
\AtEndDocument{\end{varwidth}\end{preview}}
%vtx:~/.julia/v0.7/JuliaTeX/vtx/default.tex

\title{testing}
\author{example}
\date{2018}
\begin{document}
hello world
\end{document}

The program automatically handles the conversion from TOML to LaTeX and vice versa.

Suppose you have some mathematical data (e.g. a theorem, an example, or a proof) and you wish to categorize it in a database. Then the LaTeX form of the data can be converted and stored away in the TOML data format. Thus it becomes possible to retrieve the database file; automatically convert it into a LaTeX document with all the headers; then edit it as a LaTeX document in an editor; and finally store the update in the TOML data format automatically when the editor is closed. Hence, edits are automatically made available for search and other features.

Specifying and extracting relational meta-data

There is more relational meta-data that can be extracted, which will be investigated. Specifically, it is possible to automatically extract relational edge data (as well as automatically erase it properly if necessary). It works as follows: In a local directory somewhere, suppose I have a vtx file stored that holds some key => value data, which can be loaded using the VerTeX program.

julia> using VerTeX

julia> f = VerTeX.load("testdir/pnt.vtx")
Dict{String,Any} with 14 entries:
  "label"   => ["PNT"]
  "pre"     => "%vtx:~/.julia/v0.7/VerTeX/vtx/default.tex"
  "depot"   => "julia"
  "author"  => "Gauss"
  "created" => "2018-03-08T20:04:13.151"
  "editor"  => "Person Nameson"
  "version" => ["VerTeX", "v\"0.1.0\""]
  "tex"     => "\$\$ \\lim_{x\\rightarrow +\\infty} \\frac{\\pi(x)}{\\int_2^x\\frac{du}{\\log(…
  "ids"     => Dict{String,Any}()
  "date"    => "unknown"
  "revised" => "2018-03-09T15:12:09.635"
  "uuid"    => "df3c6ade-230b-11e8-09d3-1b9aec48cc35"
  "title"   => "Prime Number Theorem"
  "dir"     => "test/pnt.vtx"

In this case, it is a statement of the Prime Number Theorem by Gauss (simple example).

The vertex data was generated after editing the information with vtx> vim test/pnt.vtx as a regular LaTeX document:

\documentclass[]{article}
% hidden preamble stuff not worth showing
\newcommand{\deps}[1]{} % VerTeX dependencies
%vtx:~/.julia/v0.7/VerTeX/vtx/default.tex

\author{Gauss}
\title{Prime Number Theorem}
\begin{document}
$$ \lim_{x\rightarrow +\infty} \frac{\pi(x)}{\int_2^x\frac{du}{\log(u)}} = 1 $$
This is the PNT\label{PNT}.
\end{document}

This .tex file is converted by VerTeX into the above key => value format, and vice versa, so making changes to the graph database is done by simply editing the .tex files as if it were a regular LaTeX document (with background scripts).

Now if you save another VerTeX which references the prime number theorem using \ref{PNT} then the VerTeX system will automatically update both the new VerTeX and also the other VerTeX file containing the referred to prime number theorem with a UUID to mark the reference.

julia> VerTeX.save(ans)
┌ Info: saving VerTeX: Prime Number Theorem
└ testdir/pnt.vtx saved in julia
┌ Info: saving VerTeX: a note on pnt
│ updated \ref{PNT}
│ at testdir/pnt.vtx in julia
└ testdir/note.vtx saved in julia

Note that an additional VerTeX at testdir/note.vtx is updated to track the reference.

This means that theorems and definitions can be tagged with \label{} and \ref{} to maintain the connections between the VerTeX files automatically. All one has to do is edit the LaTeX files, save them as VerTeX, and once all is saved all of the VerTeX data already contains all of the graph edges, ready to be used for analysis. This is going to make mapping out mathematical theories into graphs superbly easy and useful! In order to extend it to a conversation / email system, all one needs to do is add a list of receivers / recipients to a VerTeX, and it is now a letter between authors.