Pandoc: 각주 중복 - 여러 파일 - 동일한 이름

Pandoc: 각주 중복 - 여러 파일 - 동일한 이름

다음과 같은 폴더 구조가 있습니다.

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

파싱.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

내 생각은 기본적으로 Pandoc을 변환기뿐만 아니라 포맷터로도 사용하는 것이었습니다. 이것은 각주를 사용하기 시작할 때까지 꽤 잘 작동했습니다.

내가 달릴 때format.sh각주에 사용하는 모든 참조 이름은 숫자로 덮어쓰여집니다. 괜찮을 것 같지만 문제는 다음을 실행하는 것입니다.파싱.sh다음 메시지가 나타납니다.

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

문제는 각주가 모두 있다는 것 01-chapter.md입니다 . 기본적으로 Pandoc이 각 파일의 각주를 개별적으로 처리하고 마크다운 파일 전체에서 상호 참조를 허용하지 않기를 원하지만 이를 수행할 수 있는 방법이 없습니다.02-chapter.md[^1]

누구든지 아이디어가 있나요?

답변1

루아는 필요없어

방금 옵션을 우연히 발견했습니다 --file-scope. 이것을 추가하면 parse.sh문제가 해결됩니다 ...

--file-scope

여러 파일 문서를 결합하기 전에 각 파일을 개별적으로 구문 분석합니다. 이렇게 하면 동일한 식별자를 가진 다른 파일의 각주가 예상대로 작동할 수 있습니다. 이 옵션을 설정하면 각주와 링크가 파일 전체에서 작동하지 않습니다.

Pandoc 사용자 가이드

답변2

Pandoc은 포맷터로 작동하도록 설계되지 않았지만 대부분의 경우 합리적으로 잘 작동합니다.

원본 각주를 보존하기 위해 pandoc을 구할 수 있는 방법은 없으므로 다른 방법을 찾아야 합니다. 문제는 pandoc이 파일을 개별 문서로 순차적으로 읽은 다음 pandoc 내의 문서를 최종 문서로 결합하도록 하는 것입니다. 모든 입력 파일을 (를 통해) 전달하면 *.mdpandoc이사슬 같이 잇다마크다운을 구문 분석하기 전에 이러한 파일을 단일 문서로 만듭니다.

내 제안은 "인덱스"(또는 마스터) 파일을 사용하는 것입니다. Pandoc Markdown에는 하위 파일을 포함하기 위한 기본 구문이 없지만 다음을 사용하여 자체적으로 롤링할 수 있습니다.판독 루아 필터. 예를 들어, 모든 챕터를 함께 묶는 파일을 정의합니다. 여기서 파일은 코드 블록에서 한 줄에 하나씩 나열됩니다.

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

다음 코드를 파일에 넣습니다 include.lua(다음에서 가져옴).이 요점)

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

그런 다음 Lua 필터와 마스터/인덱스 파일을 입력으로 사용하여 pandoc를 호출합니다.

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

index.md이는 새 Markdown 파일을 추가할 때마다 편집해야 한다는 단점이 있습니다 . 또한 인덱스 파일에 정의된 메타데이터만 출력에 포함됩니다(이러한 제한은 약간의 코딩으로 피할 수 있음). 그 외에는 당신이 찾고 있는 것을 정확하게 수행해야 합니다.

관련 정보