org-mode 스프레드시트로 사용하기

내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.

org-mode 스프레드시트로 사용하기

Emacs에는 org-mode란 도구가 있다. 할 일 목록, 일정, 작업 로그를 정리할 때 유용하다. 행열 추가/삭제, 행열 이동 등 기본 표 편집도 가능하며, 표 안에서 간단한 계산도 가능하다. 여기서는 표 계산 방법을 간단히 살펴보려 한다. 이 글은 Org as a spreadsheet system: a short introduction을 참고해 정리한 것이다.

테이블 생성

org-mode로 표 계산을 하려면 면서 표를 삽입해야 한다. 현재 버퍼가 org-mode라면 메뉴에 Org관련 항목이 표시된다. Tbl > Create를 선택해 표를 넣을 수도 있지만, 일반 Emacs 사용자라면 M-x org-table-create를 실행하는 쪽을 선호할 것이다. org-mode에서 표는 그냥 텍스트로 되어 있고 열 구분자로 |를 사용하므로 별도 명령을 실행시킬 필요 없이 |로 행을 시작하면 바로 표를 만들 수 있다.

| Name   | English | Math | Science |
|--------+---------+------+---------|
| Apple  |      88 |   75 |      90 |
| Orange |      77 |   65 |      55 |
| Banana |      90 |   95 |      88 |

셀 참조

| Name   | English | Math | Science | Total     |
|--------+---------+------+---------+-----------|
| Apple  |      88 |   75 |      90 | [Forumla] |
| Orange |      77 |   65 |      55 |           |
| Banana |      90 |   95 |      88 |           |

위 표에서 [Formula] 위치에 English, Math, Science 점수 합계를 계산해 넣어려 한다. 수식을 넣으려면 다른 셀의 데이터를 참조해야 하므로 셀 참조 방법을 알아야 한다. 커서를 [Formula] 셀에 놓고 C-c ?를 누르면 미니버퍼에 line: 2, col: 5, ref: @2$5 or E2가 표시된다. 따라서 이 셀은 @2$5 또는 E2로 참조할 수 있지만, 수식을 계산하면 참조가 @2$5와 같은 형식으로 바뀌므로, 그냥 org-mode 형식에 익숙해지는 게 좋겠다.

표 안에 커서가 있는 상태에서 C-c }를 누르면 다음과 같이 표에 행과 열 번호가 표시된다.

  1| Name   | English | Math | Science | Total     |
I*1|$1------+$2-------+$3----+$4-------+$5---------|
  2| Apple  |      88 |   75 |      90 | [Forumla] |
  3| Orange |      77 |   65 |      55 |           |
  3| Banana |      90 |   95 |      88 |           |

수식 입력

위 표에서 [Formula] 위치에 :=vsum($2..$4)를 입력한다. 수식은 현재 행에서 $2부터 $4까지 열의 숫자를 더하라는 뜻이다. 그리고 커서가 수식에 있는 상태에서 C-c C-c를 누르면 수식이 계산 결과로 바뀌고, 테이블 밑에 #+TBLFM으로 시작하는 행이 추가되는 것을 볼 수 있다.

열 수식, 셀 수식

위에서 Apple 학생의 과목 점수 합계를 구했는데, 다른 학생에 대해서도 같은 작업을 하고 싶다. 즉 열의 모든 셀에 같은 수식을 적용하고 싶다. 이때 열 수식을 사용할 수 있다. 열 수식을 입력하려면 수식을 입력할 때 :=로 시작하는 대신 =로 시작하면 된다.

C-c C-c를 누르면 수식을 입력한 셀만 계산 값으로 바뀐다. 열 전체에 계산 결과를 넣으려면 C-u C-c *를 누르면 된다. 커서가 #+TBLFM 행 위에 있으면 C-c C-c를 눌러도 모든 수식을 다시 계산한다.

| Name   | English | Math | Science | Total |
|--------+---------+------+---------+-------|
| Apple  |      88 |   75 |      90 |   253 |
| Orange |      77 |   65 |      55 |   197 |
| Banana |      90 |   95 |      88 |   273 |
#+TBLFM: $5=vsum($2..$4)

셀 수식이었을 때는 #+TBLFM에 수식이 @2$5=vsum($2..$4)로 표현되었는데, 열 수식으로 바꾸니 $5=vsum($2..$4)로 바뀌었다. 셀 수식이었을 때는 @2$5 셀에 계산 결과가 반영되었지만 열 수식에서는 $5열 전체에 계산 결과가 적용된다.

대화형 수식 편집

지금까지는 셀에 직접 := 또는 =를 입력해 셀 수식 또는 열 수식을 입력했다. 취향에 따라C-u C-c = 또는 C-c =를 눌러 미니버퍼에서 셀 수식 또는 열 수식을 입력할 수도 있다. 그러나 C-c '를 누르면 전용 버퍼에서 수식을 편집할 수 있다. 수식 편집 시 커서가 참조 위에 있으면 해당 참조 영역이 표에서 하이라이트 된다. S-<left/right/up/down>으로 참조 영역을 선택할 수도 있다.

Emacs org-mode를 스프레드시트로 사용하는 예 스크린샷

맺음말

지금까지 org-mode에서 표 계산 사용 방법을 간단히 살펴 보았다. 이 정도면 웬만한 스트레드시트가 부럽지 않다. 표가 아주 크다든가 복잡한 계산이 필요한 경우, 차트를 그려야 하는 경우라면 구글 스프레드시트를 사용하겠지만, 간단한 표 계산이 필요한 경우라면 매우 유용하게 사용할 수 있다.

참고