Folio Writer

컴파일러를 내 뜻대로:
Folio Writer의 pandoc Lua 필터

Folio Writer의 컴파일 파이프라인은 인용, 상호 참조, 템플릿, 형식 등 99%를 감당합니다. Lua 필터는 나머지 1%를 위한 비상구입니다. 저널의 별난 내부 규칙, 나만의 약식 표기, 어떤 체크박스도 예상하지 못한 것들 말이지요. 필터는 컴파일 도중에 문서를 다시 쓰는 몇 줄짜리 Lua 코드이며, pandoc이 기본으로 실행하므로 설치할 것이 없습니다.

필터란 실제로 무엇인가

pandoc은 원고를 컴파일할 때 먼저 Markdown을 문서 트리(문단, 제목, 스팬, 인용)로 파싱합니다. Lua 필터는 그 요소 이름을 딴 함수들의 모음입니다. 각 함수는 일치하는 모든 요소와 함께 호출되며, 대체할 요소를 반환할 수 있습니다. 아무것도 반환하지 않으면 그대로 두고, {}를 반환하면 삭제하고, 새 요소를 반환하면 변환합니다. 모델은 이게 전부입니다.

Folio Writer에서 필터 연결하기

  1. 필터를 .lua 파일로 저장하세요. 프로젝트 안에 두면(예: Research 안의 Filters 하위 폴더) 원고와 함께 동기화되고 이동합니다.
  2. 컴파일 시트의 스타일 탭에서 Lua 필터 ▸ Lua 필터 추가…를 선택하세요. 여러 개를 추가하면 pandoc-crossref 다음에 순서대로 실행됩니다.
  3. 필터는 컴파일 프로필과 함께 저장됩니다. 그래서 “Elsevier 제출용”과 “지도교수용 초고”가 각자 자기 필터 묶음을 가질 수 있습니다.
미리보기도 함께 움직입니다: 실시간 미리보기는 컴파일과 같은 순서로 필터를 실행합니다. 그래서 필터의 효과를 PDF에서 뜻밖에 마주치는 대신 글을 쓰는 동안 확인할 수 있습니다.

예제 1 · 항상 최신인 날짜

아무 곳에나 @@today라고 쓰면 컴파일된 문서에 컴파일 날짜가 들어갑니다. 커버 레터나 초고 워터마크에 유용합니다.

-- today.lua
function Str(el)
  if el.text == "@@today" then
    return pandoc.Str(os.date("%B %e, %Y"))
  end
end

예제 2 · 절대 나가지 않는 초고 메모

나에게 남기는 메모를 펜스 div 안에 쓰세요. 초고 작성 중에는 보이고, 출력물에는 반드시 빠집니다.

::: draft
Ask Wei whether the 2019 calibration applies here.
:::
-- strip-draft.lua
function Div(el)
  if el.classes:includes("draft") then
    return {}          -- deleted from every compiled format
  end
end

이 필터를 제출용 프로필에만 연결하면 지도교수용 초고 프로필에는 메모가 그대로 나타납니다. 프로필별 필터는 바로 이럴 때 쓰는 것입니다.

예제 3 · 나만의 인라인 마크업

[key result]{.highlight}에 형식별로 실제 의미를 부여하세요. HTML에서는 노란 마크, LaTeX PDF에서는 하이라이트가 됩니다.

-- highlight.lua
function Span(el)
  if not el.classes:includes("highlight") then return nil end
  if FORMAT:match("latex") then
    local out = pandoc.Inlines(pandoc.RawInline("latex", "\\hl{"))
    out:extend(el.content)
    out:insert(pandoc.RawInline("latex", "}"))
    return out
  elseif FORMAT:match("html") then
    local out = pandoc.Inlines(pandoc.RawInline("html", ""))
    out:extend(el.content)
    out:insert(pandoc.RawInline("html", ""))
    return out
  end
end

LaTeX 쪽을 위해서는 포맷 메타데이터에 하이라이트 패키지를 한 번만 추가하세요: header-includes: \usepackage{soul}.

추측 없는 디버깅

두 가지 습관이면 필터 작성이 수월해집니다. 일치시키려는 트리를 보려면 터미널에서 코드 조각에 pandoc -t native를 실행하세요. 함수가 받게 될 요소를 정확히 출력해 줍니다. 그리고 컴파일이 이상하게 동작할 때는 컴파일 및 미리보기 로그가 필터 오류를 포함한 전체 pandoc 명령줄과 출력을 보여 줍니다. Folio에만 해당하는 참고 사항 하나: 파일 위치가 바뀐 필터는 컴파일을 실패시키는 대신 건너뜁니다. 필터가 아무 말 없이 작동하지 않는 것 같다면 로그를 확인하세요.

더 깊이 알아보기

pandoc Lua 필터 문서에는 모든 요소와 도우미 함수가 정리되어 있고, 커뮤니티의 필터 모음에는 약어 처리, 표 조정, 다이어그램 렌더링 등 바로 쓸 수 있는 필터가 가득합니다. 그곳의 어떤 필터든 컴파일 시트에 그대로 넣을 수 있습니다.

Folio Writer 무료 다운로드 → · 더 많은 가이드