IT

Pandoc 마크 다운 페이지 나누기

lottoking 2020. 8. 28. 19:34
반응형

Pandoc 마크 다운 페이지 나누기


최근에 LaTeX의 좋은 대안으로 보이는 Pandoc 마크 다운을 사용하기 시작했습니다. 제 문서에는 수학 공식이 많지 않아서 LaTeX에 대한 경험이 없어서 마감일이 2 주도되지 않아 좋은 솔루션이되었습니다.

내가 돌아 다닐 수 없었던 한 많은 페이지의 나머지 부분을 비워 두도록 강제하는 방법입니다. 누구든지 누구든지 수 있습니까?


pandoc markdown은 목적으로 표준 LaTeX 태그를 사용하는 것처럼 보입니다.

\newpage\pagebreak


TL; DR : 아래 \newpage의 Lua 필터를 사용 하여 다양한 형식으로 페이지 나누기 를 가져옵니다 .

Pandoc은 모든 입력을 내부 문서 형식으로 구문 분석합니다. 이 형식은 페이지 나누기를 전용 방법이 없지만 다른 방법으로 정보를 인코딩하는 것은 여전히 ​​가능합니다. 한 가지 방법은 원시 LaTeX를 사용하는 것입니다 \newpage. 이것은 LaTeX (또는 LaTeX를 통해 생성 된 pdf)를 출력 할 때 완벽하게 작동합니다. 그러나 HTML 또는 docx와 같은 다른 형식을 사용할 때 문제가 발생합니다.

다른 형식을 대상으로 할 때 간단한 해결책 은 내부 문서 표현을 변환 할 수 있는 pandoc 필터 를 사용하는 것입니다. Pandoc 2.0 이상 에서는 포함 된 Lua 인터프리터를 사용하여이 변환을 수행 할 수도 있습니다 .

다음 \newpage과 같이 빈 줄처럼 줄 을 넣어 페이지 나누기를 표시 가정 해 보겠습니다 .

lorem ipsum

\newpage

more text

원시 텍를 포함 \newpage하는 RawBlock 으로 구문 분석됩니다 . 블록은 대상 형식이 원시 TeX (예 : LaTeX, Markdown, Org 등)를 포함 할 수있는 경우에만 출력에 포함됩니다.

다른 형식을 대상으로 할 때 간단한 Lua 필터를 사용하여 변환 할 수 있습니다. 다음 작품 에 대한 DOCX , 유액 , EPUB , 경량 마크 업.

--- Return a block element causing a page break in the given format.
local function newpage(format)
  if format == 'docx' then
    local pagebreak = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>'
    return pandoc.RawBlock('openxml', pagebreak)
  elseif format:match 'html.*' then
    return pandoc.RawBlock('html', '<div style=""></div>')
  elseif format:match 'tex$' then
    return pandoc.RawBlock('tex', '\\newpage{}')
  elseif format:match 'epub' then
    local pagebreak = '<p style="page-break-after: always;"> </p>'
    return pandoc.RawBlock('html', pagebreak)
  else
    -- fall back to insert a form feed character
    return pandoc.Para{pandoc.Str '\f'}
  end
end

-- Filter function called on each RawBlock element.
function RawBlock (el)
  -- check that the block is TeX or LaTeX and contains only \newpage or
  -- \pagebreak.
  if el.text:match '\\newpage' then
    -- use format-specific pagebreak marker. FORMAT is set by pandoc to
    -- the targeted output format.
    return newpage(FORMAT)
  end
  -- otherwise, leave the block unchanged
  return nil
end

업데이트 된 기능이 더 많은 버전을 게시했습니다 . 공식 pandoc lua-filters 저장소 에서 사용할 수 있습니다 .


.doc 및 .odt 형식에서는 작동하지 않는 것으로 나타났습니다. 내가 찾은 해결 방법 -----------------은 텍스트 편집기 (제 경우에는 ibre office)를 사용하여 가로줄을 삽입 하고 "가로줄"스타일을 포맷하여 페이지를 나누고 보이지 않게하는 것이 었습니다.

참고 URL : https://stackoverflow.com/questions/16965490/pandoc-markdown-page-break

반응형