Pandocマークダウン改ページ


113

最近、LaTeXに代わるものと思われるPandocマークダウンの使用を開始しました。私のドキュメントには多くの数式がありません。また、LaTeXの経験がなく、2週間未満の提出期限と組み合わせると、優れたソリューションになります。

私が出くわすことができなかった1つのことは、ページの残りを空のままにすることをどのように強制するかです、誰かが助けることができますか?


5
Pandoc風味のMarkdownは、数式を使用する場合にも最適です。
A.ドンダ2015

回答:


135

pandoc markdownはこの目的のために標準のLaTeXタグを使用しているようです:

\newpage そして \pagebreak


9
両方とも機能します(ありがとう!)が、2つの違いは何ですか、またはまったく同じですか?
カリン、2014年

15
newpageは現在のページを終了しますが、pagebreakはより友好的なリクエストです。personal.ceu.hu/tex/breaking.htm
parvus

5
これは、出力がlatexコマンドを理解している場合、生のlatexコマンドがそのまま渡されるためです。
マシューピカリング

23

TL; DR\newpage以下のLuaフィルターを使用して、多くの形式で改ページを取得します。

Pandocはすべての入力を内部ドキュメント形式に解析します。この形式には改ページを表す専用の方法はありませんが、他の方法で情報をエンコードすることは可能です。1つの方法は、生のLaTeXを使用すること\newpageです。これは、LaTeX(またはLaTeXで作成されたpdf)を出力するときに完全に機能します。ただし、HTMLやdocxなどのさまざまな形式をターゲットにすると問題が発生します。

他の形式を対象とする場合の簡単な解決策は、内部ドキュメント表現を変換して、ニーズに合うようにすることができるpandocフィルターを使用することです。Pandoc 2.0以降で、付属のLuaインタープリターを使用してこの変換を実行することもできます

次の\newpageように、空白行のように囲まれた行を挿入して改ページを示していると仮定します。

lorem ipsum

\newpage

more text

\newpage解析されますRawBlock生含むTeXに。ターゲット形式に未加工のTeX(LaTeX、Markdown、Orgなど)を含めることができる場合にのみ、ブロックが出力に含まれます。

単純なLuaフィルターを使用して、別のフォーマットをターゲットとするときにこれを変換できます。以下docxLaTeXepub、および軽量マークアップで機能します。

--- 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
これは\newpage、pandocのMS Word出力形式で強制的に改ページするために美しく機能します。このフィルターを使用するには、この回答のコードをegに保存して、pagebreak.lua次のコマンドでpandocを呼び出します--lua-filter=pagebreak.lua
Christian Long

3

これは.docおよび.odt形式では機能しないことがわかりました。私が見つけた回避策は-----------------、テキストエディター(私の場合はibre office)を使用して、水平線を挿入し、「水平線」スタイルをフォーマットしてページを分割し、非表示にすることでした。


どうformat the "horizontal line" style to break a pageですか?
nilon

私はHTML出力についてしか知りません。その結果、PDFに出力します。Chromeには、印刷用のCSS解釈の非常に優れた実装があります。この場合、hr{opacity:0;page-break-after: always;}仕事をします。他の<hr>ものに使用したい場合は、他の要素を犠牲にすることができます。
ホアキン

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:出力enable raw_tex

-f markdown-raw_tex-raw_attribute:input disable raw_texおよびraw_attribute

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.