지난 포스팅은...
지난 포스팅에서는 수식을 선택해놓은 상태에서, 어떻게 하면 수식의 텍스트를 추출할 수 있는지를 보여주었다. 파이썬으로 해당 텍스트를 가져오기만 하면, 그 다음은 LaTeX로 변환해서 저장하든, 웹에 업로드를 하든 자유롭게 활용할 수 있을 것이기 때문이다.
그러면 이번 포스팅에서는, 추출하기 전에 수식을 차례로 선택하는 과정을 파이썬 코드로 진행해 보겠다. 지난 포스팅에서 언급한 바와 같이, GetAnchorPos(0), SetPos(List, Para, Pos), 그리고 FindCtrl() 등 세 가지 메서드를 이용하는 방법을 소개한다. 너무 자세한 설명은 생략하였으나, 댓글로 질문 남길 시 답변드릴 예정.
코드를 먼저 소개한다. 문서 안의 수식을 차례로 선택하는 파이썬 코드.
"""모든 수식 텍스트 차례로 dict로 얻기.
키는 (List, Para, Pos), 값은 eqn_string"""
def extract_eqn(hwp): # 이전 포스팅에서 소개한, 수식 추출방법을 함수로 정의
Act = hwp.CreateAction("EquationModify")
Set = Act.CreateSet()
Pset = Set.CreateItemSet("EqEdit", "EqEdit")
Act.GetDefault(Pset)
return Pset.Item("String")
eqn_dict = {} # 사전 형식의 자료 생성 예정
ctrl = hwp.HeadCtrl # 첫 번째 컨트롤(HeadCtrl)부터 탐색 시작.
while ctrl != None: # 끝까지 탐색을 마치면 ctrl이 None을 리턴하므로.
nextctrl = ctrl.Next # 미리 nextctrl을 지정해 두고,
if ctrl.CtrlID == "eqed": # 현재 컨트롤이 "수식eqed"인 경우
position = ctrl.GetAnchorPos(0) # 해당 컨트롤의 좌표를 position 변수에 저장
position = position.Item("List"), position.Item("Para"), position.Item("Pos")
hwp.SetPos(*position) # 해당 컨트롤 앞으로 캐럿(커서)을 옮김
hwp.FindCtrl() # 해당 컨트롤 선택
eqn_string = extract_eqn() # 문자열 추출
eqn_dict[position] = eqn_string # 좌표가 key이고, 수식문자열이 value인 사전 생성
ctrl = nextctrl # 다음 컨트롤 탐색
hwp.Run("Cancel") # 완료했으면 선택해제
위 코드를 실행한 결과는 아래와 같다.
간단한 코드 설명은 주석으로 달아 두었으며, 자세한 설명은 생략한다. 이해가 안되거나 궁금한 부분이 있는 경우,
1. 편하게 댓글로 문의 남겨놓으시거나,
2. HWP API 문서 중 "HwpCtrl API.hwp" 파일을 검색해볼 것.
이번 포스팅도 짧게 여기서 마친다. 어떤 독자들은 이런 궁금증을 가져보았을 수도 있다.
"수식"에서 "문자열 추출"이 가능하다면, 역으로 "수식문자열"만으로 "수식"을 만들 수 있지 않을까?
물론 가능하다. 그걸 다음 포스팅에서 다룰 예정이다.
다음 포스팅은...
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
[4/5, HwpEqn] 수식문자열로 수식 만드는 방법 (0) | 2020.12.18 |
---|---|
[2/5, HwpEqn] HWP문서 수식을 텍스트로 추출하는 방법(feat. 파이썬) (0) | 2020.12.18 |
[1/5, HwpEqn 서론] LaTeX 수식을 한/글 수식편집기에 넣을 수 있다? (7) | 2020.12.16 |
댓글