최근에 저는 LaTeX에 대한 좋은 대안으로 보이는 Pandoc 마크 다운을 사용하기 시작했습니다. 제 문서에는 수학 공식이 많지 않고 LaTeX에 대한 경험이 없어서 제출 마감일이 2 주도되지 않아 좋은 솔루션이되었습니다.
내가 돌아 다닐 수 없었던 한 가지는 페이지의 나머지 부분을 비워 두도록 강제하는 방법입니다. 누구든지 도울 수 있습니까?
최근에 저는 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 저장소 에서 사용할 수 있습니다 .
\newpage
pandoc의 MS Word 출력 형식으로 페이지 나누기 를 강제하는 데 아름답게 작동 합니다. 이 필터를 사용하려면이 답변에있는 코드를 예를 들어 저장하고 pagebreak.lua
pandoc를 호출합니다.--lua-filter=pagebreak.lua
.doc 및 .odt 형식에서 작동하지 않는 것으로 나타났습니다. 내가 찾은 해결 방법 -----------------
은 텍스트 편집기 (제 경우에는 ibre office)를 사용하여 가로줄을 삽입 하고 "가로줄"스타일을 포맷하여 페이지를 나누고 보이지 않게하는 것이 었습니다.
format the "horizontal line" style to break a page
하시겠습니까?
hr{opacity:0;page-break-after: always;}
작업을 수행합니다. 다른 용도로 사용하려면 다른 요소를 희생 할 수 있습니다 <hr>
.
LucasSeveryn 답변을 편집 할 수 없으며 대기열이 가득 차서 여기에 정보를 추가하십시오.
\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"
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