[latex] 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

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


답변

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


답변

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


답변