Pandoc: Notas al pie duplicadas - múltiples archivos - mismo nombre

Pandoc: Notas al pie duplicadas - múltiples archivos - mismo nombre

Tengo una estructura de carpetas como la siguiente:

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

formato.sh

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

Básicamente, mi idea era usar Pandoc no solo como conversor sino también como formateador; esto funcionó bastante bien hasta que comencé a usar notas al pie:

cuando corroformato.shcada nombre de referencia que uso para mis notas al pie se sobrescribe con un número, lo cual estaría bien, pero el problema es si ejecutoparse.shRecibo el siguiente mensaje:

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

El problema es 01-chapter.mdque 02-chapter.mdambos tienen una nota a pie de página [^1]. Básicamente, me gustaría que Pandoc manejara las notas al pie de cada archivo por separado y no permitiera referencias cruzadas entre mis archivos de rebajas, pero no veo ninguna forma de hacerlo.

¿Alguien tiene alguna idea?

Respuesta1

No hay necesidad de lua

Me topé con la --file-scopeopción. Añade esto a parse.shy te librarás de problemas...

--file-scope

Analice cada archivo individualmente antes de combinarlo para documentos de varios archivos. Esto permitirá que las notas a pie de página en diferentes archivos con los mismos identificadores funcionen como se espera. Si se configura esta opción, las notas al pie y los enlaces no funcionarán en todos los archivos.

Guía del usuario de Pandoc

Respuesta2

Pandoc no está diseñado para funcionar como formateador, pero funciona razonablemente bien la mayor parte del tiempo.

No hay forma de hacer que pandoc conserve las notas a pie de página originales, por lo que tendrá que encontrar un método diferente. El desafío es lograr que pandoc lea los archivos secuencialmente como documentos individuales y luego combine los documentos dentro de pandoc en el documento final. Simplemente pasar todos los archivos de entrada (a través de *.md) hace que pandocconcatenarestos archivos en un solo documento antes de analizar la rebaja.

Mi sugerencia sería utilizar un archivo "índice" (o maestro). Pandoc Markdown no tiene una sintaxis incorporada para la inclusión de archivos secundarios, pero podemos implementar el nuestro con unafiltro pandoc lua. Por ejemplo, defina un archivo que unirá todos sus capítulos, donde los archivos se enumeran uno por línea en un bloque de código:

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

Coloque el siguiente código en un archivo include.lua(tomado deesta esencia)

--- 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

Luego llame a pandoc con el filtro Lua y el archivo maestro/índice como entrada:

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

Esto tiene la desventaja de que tendrás que editar index.mdcada vez que agregues un nuevo archivo Markdown; Además, solo los metadatos definidos en el archivo de índice aparecerán en la salida (aunque ambas limitaciones podrían evitarse con un poco de codificación). Aparte de eso, debería hacer exactamente lo que buscas.

información relacionada