Pandoc: Doppelte Fußnoten – mehrere Dateien – gleicher Name

Pandoc: Doppelte Fußnoten – mehrere Dateien – gleicher Name

Ich habe eine Ordnerstruktur wie die folgende:

chapters/
  01-chapter.md
  02-chapter.md
  03-chapter.md
format.sh
parse.sh

parse.sh

pandoc -t html5+smart -so dist/book.html --html-q-tags chapters/*.md

format.sh

for f in chapters/*.md;
  do
    pandoc "$f" -o "$f" -t \
    markdown+smart+footnotes-escaped_line_breaks+example_lists \
    --columns=80;
done

Meine Idee bestand im Wesentlichen darin, Pandoc nicht nur als Konverter, sondern auch als Formatierer zu verwenden. Dies funktionierte ziemlich gut, bis ich begann, Fußnoten zu verwenden:

Wenn ich laufeformat.shjeder Referenzname, den ich für meine Fußnoten verwende, wird durch eine Nummer überschrieben - das wäre in Ordnung, aber das Problem ist, wenn ich dann ausführeparse.shIch erhalte folgende Meldung:

[WARNING] Duplicate note reference '1' at line 360 column 1

Das Problem ist 01-chapter.md, dass 02-chapter.mdbeide eine Fußnote haben [^1]. Grundsätzlich möchte ich, dass Pandoc die Fußnoten für jede Datei separat behandelt und keine Querverweise zwischen meinen Markdown-Dateien zulässt, aber ich sehe keine Möglichkeit, dies zu tun.

Irgendjemand irgendwelche Ideen?

Antwort1

Lua ist nicht nötig

Ich bin zufällig auf diese --file-scopeOption gestoßen. Fügen Sie diese hinzu parse.sh, und Sie sind aus dem Ärger raus ...

--file-scope

Analysieren Sie jede Datei einzeln, bevor Sie sie für Dokumente mit mehreren Dateien kombinieren. Dadurch funktionieren Fußnoten in verschiedenen Dateien mit denselben Kennungen wie erwartet. Wenn diese Option festgelegt ist, funktionieren Fußnoten und Links nicht dateiübergreifend.

Pandoc-Benutzerhandbuch

Antwort2

Pandoc ist nicht als Formatierungsprogramm konzipiert, funktioniert aber meistens recht gut.

Es gibt keine Möglichkeit, pandoc dazu zu bringen, die ursprünglichen Fußnoten beizubehalten, also müssen Sie eine andere Methode finden. Die Herausforderung besteht darin, pandoc dazu zu bringen, die Dateien sequenziell als einzelne Dokumente zu lesen und die Dokumente dann innerhalb von pandoc zum endgültigen Dokument zu kombinieren. Wenn Sie einfach alle Eingabedateien (über *.md) übergeben, führt pandoc dazu,verkettendiese Dateien in ein einzelnes Dokument, bevor das Markdown analysiert wird.

Mein Vorschlag wäre, eine „Index“-Datei (oder Master-Datei) zu verwenden. Pandoc Markdown hat keine integrierte Syntax für die Einbindung von untergeordneten Dateien, aber wir können unsere eigene mit einemPandoc Lua-Filter. Definieren Sie beispielsweise eine Datei, die alle Ihre Kapitel zusammenhält, wobei die Dateien in einem Codeblock zeilenweise aufgelistet werden:

``` include
chapters/1.md
chapters/2.md
chapters/3.md
```

Fügen Sie den folgenden Code in eine Datei ein include.lua(entnommen ausdieser Kern)

--- Pandoc Lua filter to include other Markdown files
local List = require 'pandoc.List'

function CodeBlock(cb)
  if cb.classes:includes'include' then
    local blocks = List:new()
    for line in cb.text:gmatch('[^\n]+') do
      if line:sub(1,1)~='#' then
        local fh = io.open(line)
        blocks:extend(pandoc.read (fh:read '*a').blocks)
        fh:close()
      end
    end
    return blocks
  end
end

Rufen Sie dann pandoc mit dem Lua-Filter und der Master-/Indexdatei als Eingabe auf:

pandoc -t html5+smart -so dist/book.html --html-q-tags --lua-filter=include.lua index.md

Dies hat den Nachteil, dass Sie jedes Mal Änderungen vornehmen müssen, wenn index.mdSie eine neue Markdown-Datei hinzufügen. Außerdem werden nur die in der Indexdatei definierten Metadaten in die Ausgabe aufgenommen (beide Einschränkungen könnten jedoch mit ein wenig Codierung vermieden werden). Abgesehen davon sollte es genau das tun, wonach Sie suchen.

verwandte Informationen