Pandoc 마크 다운 페이지 나누기


113

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

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


5
Pandoc-flavored Markdown은 수학 공식을 사용할 때도 좋습니다.
A. Donda

답변:


135

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

\newpage\pagebreak


9
둘 다 작동하지만 (감사합니다!) 둘의 차이점은 무엇입니까 아니면 정확히 동일합니까?
Kalin 2014 년

15
newpage는 현재 페이지를 종료하는 반면 pagebreak는 친숙한 요청에 가깝습니다. personal.ceu.hu/tex/breaking.htm
parvus

5
출력이 라텍스 명령을 이해하면 원시 라텍스 명령이 바로 전달되기 때문입니다.
마태 복음 피커링

23

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

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

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

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

lorem ipsum

\newpage

more text

는 원시 TeX를 포함 \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 저장소 에서 사용할 수 있습니다 .


8
이것은 \newpagepandoc의 MS Word 출력 형식으로 페이지 나누기 를 강제하는 데 아름답게 작동 합니다. 이 필터를 사용하려면이 답변에있는 코드를 예를 들어 저장하고 pagebreak.luapandoc를 호출합니다.--lua-filter=pagebreak.lua
Christian Long

3

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


어떻게 format the "horizontal line" style to break a page하시겠습니까?
nilon 2010 년

결과적으로 pdf로 인쇄하는 HTML 출력에 대해서만 알고 있습니다. Chrome은 인쇄용 CSS 해석을 정말 훌륭하게 구현했습니다. 이 경우 hr{opacity:0;page-break-after: always;}작업을 수행합니다. 다른 용도로 사용하려면 다른 요소를 희생 할 수 있습니다 <hr>.
Joaquin

0

LucasSeveryn 답변을 편집 할 수 없으며 대기열이 가득 차서 여기에 정보를 추가하십시오.

방법 1 : + raw_tex

\newpage\pagebreak필요에 raw_tex의 확장.

// pandoc 2.9.2.1에서는 docx 또는 html 출력에서 ​​작동하지 않음, --verbose는 말합니다.

[INFO] Not rendering RawBlock (Format "tex") "\\pagebreak"
[INFO] Not rendering RawBlock (Format "tex") "\\newpage"

방법 2 : + raw_attribute

https://pandoc.org/MANUAL.html#extension-raw_attribute

```{=openxml}
<w:p>
  <w:r>
    <w:br w:type="page"/>
  </w:r>
</w:p>
```

// gfm 입력 형식도 지원하지 않습니다.
// 이것은 docx 출력에서 ​​작동하며 html 출력에서는 작동하지 않습니다.

확장 알림

이것은 +raw_tex형식 확장 이 필요 합니다. pandoc의 모든 마크 다운 변형을 지원하지는 않습니다.

https://pandoc.org/MANUAL.html#markdown-variants

Note, however, that commonmark and gfm have limited support for extensions.  

Only those listed below (and smart, raw_tex, and hard_line_breaks) will work.  

The extensions can, however, all be individually disabled.

Also, raw_tex only affects gfm output, not input.

그래서 -f markdown작동하지만 할 -f gfm일을하지.

형식 확장

https://pandoc.org/MANUAL.html#option--from

Extensions can be individually enabled or disabled by appending 
+EXTENSION or -EXTENSION to the format name.

예를 들면

-t html+raw_tex: 출력 활성화 raw_tex

-f markdown-raw_tex-raw_attribute: 입력 비활성화 raw_tex 및 raw_attribute

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.