HTML to LaTeX converter using antlr4.
Author: Akira Hakuta, Date: 2018/08/12
Python3: https://www.python.org/downloads/windows/
ANTLR : http://www.antlr.org (antlr4-python3-runtime 4.7)
cx_Freeze: https://anthony-tuininga.github.io/cx_Freeze/
python3 (python-3.6.2.exe)
pip install antlr4-python3-runtime
pip install cx_Freeze
> python.exe antlr4_html2latex.py example\sample1.html
This is antlr4_html2latex version 0.6.
antlr4_html2latex creates 'sample1.tex'.
> python.exe antlr4_html2latex.py example\sample2.html -m MOD
This is antlr4_html2latex version 0.6.
modifying html file (insert 'optional tags' except p tag) ....
paired tag error. delete: line = 68, column = 1, </div>
paired tag error {'name':[number of opening tags, number of closing tags],...}
{'span': [2, 1]}
insert tags:
line = 22, column = 6, </li>
line = 23, column = 3, </li>
line = 24, column = 6, </li>
line = 27, column = 6, </li>
line = 28, column = 3, </li>
line = 29, column = 5, </li>
line = 38, column = 3, </td></tr>
line = 40, column = 4, </th>
line = 45, column = 6, </td>
line = 46, column = 6, </td>
line = 47, column = 4, </td></tr>
line = 48, column = 9, </td>
line = 56, column = 3, </dd>
line = 57, column = 3, </dt>
line = 65, column = 30, </rt>
line = 66, column = 5, </rp>
modifying html file (insert p tag) ....
insert p tag:
line = 15, column = 2, </p>
line = 17, column = 1, </p>
delete paired tags: ['span']
antlr4_html2latex creates 'sample2.tex'.
> python.exe antlr4_html2latex.py -h
usage: antlr4_html2latex.py [-h] [-v] [-e ENCODING] [-m MOD] [-a NOA]
[-i NOIMG] [-t NOTBL]
filename
positional arguments:
filename set filename, for example test.html
optional arguments:
-h, --help show this help message and exit
-v show program's version number and exit
-e ENCODING -e ascii or -e euc-jp or ... ,default = utf-8
-m MOD modifying html file (optional tags, ..), default = NOMOD
-a NOA converting anchor to href, default = A
-i NOIMG converting img to includegraphics, default = IMG
-t NOTBL converting table to tabular ,default = TBL
Please add and change.
paired tag --> latex
[pair_tag], [p], [], [\\par\n]
[pair_tag], [li], [\\item ] , [\n]
[pair_tag], [ol], [\n\\begin{enumerate}\n] , [\n\\end{enumerate}]
[pair_tag], [ul], [\n\\begin{itemize}\n],[\n\\end{itemize}]
[pair_tag], [dt], [],[\\par\n]
[pair_tag], [dd], [~~~],[\\par\n]
......
entity code --> latex
[sp_text], [α], [$\\alpha$]
[sp_text], [β], [$\\beta$]
[sp_text], [γ], [$\\gamma$]
[sp_text], [†], [$\\dagger$]
.......
[sp_text], [°], [$^\\circ$]
[sp_text], [–], [--]
[sp_text], [/], [/]
[sp_text], [&], [\\verb|&|]
[sp_text], [$], [\\verb|$|]
[sp_text], [%], [\\verb|%|]
[sp_text], [_], [\_]
If you want to antlr4_tex2sym.py to .exe files,
python.exe setup.py
> antlr4_tex2sym.exe example\sample1.html
> antlr4_tex2sym.exe example\sample2.html -m MOD
同様のツールは、既にあるのですが、
The Definitive ANTLR 4 Reference (by Terence Parr) 12.4 Parsing and Lexing XML
を参考に、いちからプログラムを書いてみました。
完成したものを実行してみると、
line 3610:218 mismatched input '<EOF>' expecting '<'
と表示されることがあります。
原因と思われるのは、
- タグが省略 されている。特に終了タグ。 ( optional tags : li, dd, tr, p, .... )
- 終了タグが多い 。
- 終了タグが少ない。例えば、
</div>
対応策
- コードを読んで、適当な場所に closing tag を挿入 ( html, body, head を除く )
- 分かった時点で、closing tag を単純に削除
- error message を表示し、該当する paired tag をすべて削除
> python.exe antlr4_html2latex.py example\sample2.html -m MOD
で確認してください。
pdflatex.exe で pdf が作れないこともあります。
その時は、
option -a NOA -i NOIMG
を付けて実行。
\href, \includegraphics
なしで、LaTeX のコードを生成します。
LaTeX の tabular はページを超えて表示することはできません。
-t NOTBL
とすると、
'tabular' 形式ではなく、paired tag 'table' 内の TEXT のみ出力します。
※ 生成した tex ファイルは pdflatex.exe で compile して下さい。
> pdflatex.exe -synctex=1 -interaction=nonstopmode sample1.tex
大きな問題はないと思いますが、他の処理系では確認していません。
releases の各 zip fileをクリックして解凍。