아래 방법은 1) 불편하고 2) 부정확하다. 2018년 공주대학교 레이텍 워크숍에서 편리하고 정확한 프로그램이 공개되었으므로 그 방법을 이용하자.
프레젠테이션 및 프로그램은 해당 페이지에서 받을 수 있다. 진짜 너무나 편리함...
From HWP to LaTeX ( http://wiki.ktug.org/wiki/wiki.php/LaTeXWorkshop/2018 )
hml-equation-parser에 대한 소개는 다음 기사 참고.
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20161229092520
윈도우가 아니라면 다음 글을 참고.
https://jomno.github.io/hwp-%EC%88%98%EC%8B%9D%EC%9D%84-LaTex%EB%A1%9C(hml-equation-parser)/
다음은 윈도우 파이썬 3.6 기준.
0. 추출할 hwp 파일을 한글에서 hml로 저장한다(다른 이름으로 저장). 편의상 파일명은 test.hml로 바꾼다.
1. hml-equation-parser를 설치한다. pip로 하면 됨. 당연한 얘기지만 virtualenv를 사용하면 더 좋다. 그건 알아서.
pip install hml-equation-parser
2. python 실행
python
3. 파서 샘플 코드는 다음과 같다.
import hml_equation_parser as hp
doc = hp.parseHmlSample("test.hml")
doc = hp.convertEquationSample(doc)
string = hp.extract2HtmlStrSample(doc)
import codecs
f = codecs.open("test.html", "w", "utf8")
f.write(string)
f.close()
4. 근데 한국어(cp949) 윈도우에서 이걸 실행하면 2행에서 악명 높은 UnicodeDecodeError가 날 거다. 따라서 다음 코드를 먼저 실행하고 샘플 코드를 실행. 출처는 https://stackoverflow.com/a/34345136/6153990
import _locale
_locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])
5. 이제 test.html 파일이 생겼다. 보니까 100% 완벽한 건 아니지만(\가 생략되는 등) 뭐 어쩔 수 없지.
6. 파서에서 html에 기본적으로 MathJax를 심어놓았으므로 해당 span들만 추출하면 된다. 해당 html 파일을 브라우저로 열고 개발자 도구(F12)에서 다음 코드 실행.
(() => {
const els = [...document.body.querySelectorAll('script[id^="MathJax-Element-"')];
const eqs = els.map(el => '$$' + el.textContent + '$$');
let doc = window.open('', '어흥', 'width=512, height=1024').document;
let pre = doc.createElement('pre');
pre.textContent = eqs.join('\n');
doc.body.appendChild(pre);
})();
7. 팝업 차단을 해제하면 새 창이 하나 뜰 거다. 이제 그걸 전체 선택하고 텍스트 파일에 복붙하면 끝.
8. https://www.mathjax.org/#demo 혹은 http://www.codecogs.com/eqnedit.php 요런 곳에 가서 실험해보면 된다.
9. 매스타입 등에 쓰려면 MathML으로 추출하는 게 편할 텐데 그러면 6번 코드 2~3행을 다음과 같이 변경. 근데 변환 결과가 완벽하지 않아서 더 불편할 것 같음...
const els = [...document.body.querySelectorAll('span[id^="MathJax-Element-"')];
const eqs = els.map(el => el.getAttribute('data-mathml'));
'응용프로그램' 카테고리의 다른 글
매닉타임 1.8년 결산 (1) | 2017.04.26 |
---|---|
중점, 가운뎃점, 내적, 곱하기 어느 기호를 써야 하는가 (0) | 2017.02.01 |
구글 크롬 최근 탭 간 Ctrl+Tab 이동 (1) | 2016.07.08 |
Noto Sans Mono CJK KR 서체 PDF 임베딩 문제 (0) | 2015.12.09 |
아마존 상품정보 importxml로 불러오기 (0) | 2015.06.03 |