아래아한글의 장점 중 하나는 깔끔한 수식.
Visual String 을 이용한 간편한 수식삽입도 가능하며, LaTeX나 MathML과는 다소 상이한,
이를테면 이런 식이다.
위 식의 한컴수식 문자열은 아래와 같다.
a ^{m} ÷a ^{n} = {cases{a ^{m-n} ~~&(m>n)#1&(m=n)#{1} over {a ^{n-m}}&(m<n)}}
또한 한/글에서는, 외부호환성을 위해 위 식을 MathML로 변환하여 저장하거나
반대로 MathML에서 불러오는 기능을 제공한다.
참고로 MathML(일명 mml) 서식으로 변환된 식은 아래와 같다.
<math>
<msup>
<mi>a</mi>
<mrow>
<mi>m</mi>
</mrow>
</msup>
<mo>÷</mo>
<msup>
<mi>a</mi>
<mrow>
<mi>n</mi>
</mrow>
</msup>
<mo>=</mo>
<mrow>
<mo>{</mo>
<mtable>
<mtr>
<mtd>
<msup>
<mi>a</mi>
<mrow>
<mi>m</mi>
<mo>-</mo>
<mi>n</mi>
</mrow>
</msup>
<mo> </mo>
<mo> </mo>
</mtd>
<mtd>
<mi>(</mi>
<mi>m</mi>
<mo>〉</mo>
<mi>n</mi>
<mi>)</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mn>1</mn>
</mtd>
<mtd>
<mi>(</mi>
<mi>m</mi>
<mo>=</mo>
<mi>n</mi>
<mi>)</mi>
</mtd>
</mtr>
<mtr>
<mtd>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<msup>
<mi>a</mi>
<mrow>
<mi>n</mi>
<mo>-</mo>
<mi>m</mi>
</mrow>
</msup>
</mrow>
</mfrac>
</mtd>
<mtd>
<mi>(</mi>
<mi>m</mi>
<mo>〈</mo>
<mi>n</mi>
<mi>)</mi>
</mtd>
</mtr>
</mtable>
</mrow>
</math>
MathML은 가독성을 고려해서는 안되는 마크업이다. 굳이 왜 이런 기능을 넣었을까 싶을 만도 하겠지만,
파이썬의 유익한 모듈인 latex2mathml 을 사용하면 어떨까?
MathML은 마크업언어인만큼 기준이 되고, 타 마크업으로 변환시 오류가 거의 없는데,
이를 통해 한/글 수식을 LaTeX로 변환하는 것이 가능하며, LaTeX 또한 한/글에 삽입하는 것이 가능하다.
예제를 한 번 보자. 아래 예제는 LaTeX 문법으로 A_m,n 행렬을 나타낸다.
A_{m,n} =
\begin{bmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m,1} & a_{m,2} & \cdots & a_{m,n}
\end{bmatrix}
그리고 아래는 위의 수식에 대응하는 MathML 문법이다.(파이썬의 latex2mathml 모듈 사용)
<math>
<mrow>
<msub>
<mi>A</mi>
<mrow>
<mi>m</mi>
<mi>,</mi>
<mi>n</mi>
</mrow>
</msub>
<mo>=</mo>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>1</mn>
<mi>,</mi>
<mn>1</mn>
</mrow>
</msub>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>1</mn>
<mi>,</mi>
<mn>2</mn>
</mrow>
</msub>
</mtd>
<mtd>
<mo>⋯</mo>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>1</mn>
<mi>,</mi>
<mi>n</mi>
</mrow>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>2</mn>
<mi>,</mi>
<mn>1</mn>
</mrow>
</msub>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>2</mn>
<mi>,</mi>
<mn>2</mn>
</mrow>
</msub>
</mtd>
<mtd>
<mo>⋯</mo>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mn>2</mn>
<mi>,</mi>
<mi>n</mi>
</mrow>
</msub>
</mtd>
</mtr>
<mtr>
<mtd>
<mo>⋮</mo>
</mtd>
<mtd>
<mo>⋮</mo>
</mtd>
<mtd>
<mo>⋱</mo>
</mtd>
<mtd>
<mo>⋮</mo>
</mtd>
</mtr>
<mtr>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mi>m</mi>
<mi>,</mi>
<mn>1</mn>
</mrow>
</msub>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mi>m</mi>
<mi>,</mi>
<mn>2</mn>
</mrow>
</msub>
</mtd>
<mtd>
<mo>⋯</mo>
</mtd>
<mtd>
<msub>
<mi>a</mi>
<mrow>
<mi>m</mi>
<mi>,</mi>
<mi>n</mi>
</mrow>
</msub>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</math>
위 텍스트를 한/글 수식편집기로 불러와서 수식을 만들면 아래와 같다.
기본적인 마크업 간 변환을 알아보았다. 디테일하게 들어가면 경미한 변환오류가 있다고들 하는데, 필자는 수학이나 물리를 가르치는 일을 하지 않기 때문인지, 한 번도 오류를 경험한 적은 없다. 물론 세간의 루머처럼 수식 입력시 프로그램이 다운되고 꺼지고 복구가 불가능하게 된 적도 없다..
다음 포스팅에는 한/글에 삽입된 수식을 텍스트로 추출하거나, MathML 변환을 거쳐서 LaTeX로 변환하는 과정을 알아보고, 한/글 파일의 수식과 텍스트를 마크다운으로 변환하여 웹에 업로드하는 일련의 과정을 튜토리얼처럼 알아보기로 하자.
<참고로, 필자는 이 분야 전문가가 아니므로, 설명에 작은 오류라도 있으면 적극적으로 댓글 남겨주시기 부탁드리며,
수식 관련해서 추가로 알려드렸으면 하는 API명령어나 수식 다루는 법이 궁금하신 경우에도 댓글로 남겨주시기 바람>
다음 포스팅은...
[2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법
(1) 안녕하세요 ~ 저는 유튜브 회사원코딩 구독자입니다. 올려주신 영상들 잘 시청하고 있습니다. 문의드릴 사항으로는 한글 파일을 이미지로 변환하여 저장하고, 한글파일내의 텍스트의 위치
www.martinii.fun
'업무자동화 > 파이썬-아래아한글 자동화 응용' 카테고리의 다른 글
[2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법(feat. 파이썬) (0) | 2020.12.18 |
---|---|
[1/5, HwpEqn 서론] LaTeX 수식을 한/글 수식편집기에 넣을 수 있다? (7) | 2020.12.16 |
[4/4] 파이썬으로 정관.HWP 서식잡기 종합 (0) | 2020.12.16 |
[3/4] 정관문서 서식잡기(장이름 중앙정렬, 위아래 빈라인 삽입) (0) | 2020.12.12 |
덕분에 한글파일 다루는법을 많이 배우는것 같습니다~
다음 포스팅이 기대 되네요 ^^
답글
제가 원하는 기능인데 .. 파이썬을 잘 모르다보니 잘 안되네요.. 조금만 과정을 상세히 알려 주실 수 없으실까요.. 이게 가능하면 PDF에 있는 수식을 한글로 불러올 수 있을거 같아서요.
답글
안녕하세요 유익한 정보 감사합니다!!
질문이 있는데요, python 내에서 latex 수식을 "a ^{m} ÷a ^{n} = {cases{a ^{m-n} ~~&(m>n)#1&(m=n)#{1} over {a ^{n-m}}&(m<n)}}"와 같이 만드는 건 문제 없는데요
이 수식을 python code내에서 hwp파일로 저장할 수 있는 방법이 있을까요?
답글
한글에서는 레이텍 수식을 바로 삽입할 수 없습니다. 한글 수식은 mathml로 작성되기 때문에 latex 수식을 mathml로 변환하는 단계가 필요합니다. 아래 링크의 질문에 여러 가지 답변이 있는데 참고하시기 바랍니다.
mathml로 변환하신 후 제 포스팅을 참고하셔서 한글문서에 삽입하시면 됩니다.
아 넵 감사합니다 이해했습니다.
그럼 혹시 python 코드 내에서
"hwp 파일 생성" -> "mathml 수식 입력" -> "hwp파일 저장"
이 가능한 API가 있을까요? 찾아봤으나 없는듯하여 질문드립니다..
답글
https://employeecoding.tistory.com/m/114
참고
https://employeecoding.tistory.com/194
말씀하신 내용으로 포스팅을 작성해보았습니다. 참고하시고, 추가로 궁금하신 부분은 메일이나 댓글 남겨주시기 바랍니다.
행복한 하루 되세요!