아래아한글의 장점 중 하나는 깔끔한 수식.
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
국내 유일의 파이썬+한컴오피스 업무자동화 입문강의
움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 인프런 | 강의
파이썬으로 아래아한글을 다루는 짧은 예제코드들을 소개하고, 중간중간의 결과를 GIF로 보여드립니다. 동영상 강의가 아니지만 오히려 빠르게 배울 수 있고, 따라하기도 쉽습니다., - 강의 소개
www.inflearn.com
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법(feat. 파이썬) (0) | 2020.12.18 |
---|---|
[4/4] 파이썬으로 정관.HWP 서식잡기 종합 (1) | 2020.12.16 |
[한/글자동화 예제] 글자크기를 임의로 바꾸는 간단한 방법 (0) | 2020.12.15 |
댓글