Как я могу заставить Pandoc сохранить мои ссылочные ссылки? - PullRequest
2 голосов
/ 15 марта 2019

Я использую расширение формата Pandoc в коде Visual Studio для форматирования документов разметки.

Я пишу свои ссылочные ссылки в стиле, подобном переполнению стека, например:

This is a test file, created by Tim at [Tigra Astronomy][tigra].

This is another line.

[tigra]: http://tigra-astronomy.com "Tigra home page"

Пандок действительно портит эти ссылки.Я пробовал различные комбинации опций и экспериментов командной строки, таких как:

pandoc .\input.md --from markdown --to markdown-shortcut_reference_links --reference-links --reference-location=document

, эта команда на самом деле выдает такой вывод:

Это тестовый файл, созданныйТим в [Астрономии Тигры] [].

Это еще одна строка.

[Астрономия Тигры]: http://tigra -astronomy.com"Домашняя страница Тигры"

... что довольно близко, но все еще не совсем там.Так есть ли способ, которым я могу убедить Пандока просто сохранить мои ссылки «как написано»?

1 Ответ

1 голос
/ 15 марта 2019

Так есть ли способ убедить Пандока просто сохранить мои ссылки «как написано»?

Короче говоря нет , поскольку Пандок не сохраняет этоинформация.

С помощью команды pandoc --from markdown --to native вы можете заставить Pandoc вывести Абстрактное синтаксическое дерево (AST), которое является внутренним собственным представлением Pandoc документа.Для вашего образца документа AST выглядит следующим образом (см. Также онлайн-демонстрацию ):

[Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "test",Space,Str "file,",Space,Str "created",Space,Str "by",Space,Str "Tim",Space,Str "at",Space,Link ("",[],[]) [Str "Tigra",Space,Str "Astronomy"] ("http://tigra-astronomy.com","Tigra home page"),Str "."]
,Para [Str "This",Space,Str "is",Space,Str "another",Space,Str "line."]]

Как видите, ссылка не сохраняет «имя», которое вы ей присвоили,Поэтому, когда Pandoc преобразует AST обратно в Markdown, он не может использовать ваше «имя», поскольку он недоступен.Первоначально я думал, что, возможно, вы могли бы использовать фильтр или пользовательский писатель , чтобы включить ваше ссылочное имя, но это также не сработает, поскольку имя просто недоступно.

В конце концов, это не должно удивлять.Pandoc не обещает сохранять все метаданные, включенные в документы.На самом деле документация предупреждает :

Поскольку промежуточное представление документа pandoc менее выразительно, чем многие форматы, между которыми он конвертируется, не следует ожидать идеальных конверсий между всеми форматамии любой другой.Pandoc пытается сохранить структурные элементы документа, но не форматирует такие детали, как размер поля.И некоторые элементы документа, такие как сложные таблицы, могут не вписываться в простую модель документа pandoc.Хотя преобразования из Markdown pandoc во все форматы стремятся быть совершенными, можно ожидать, что преобразования из форматов, более выразительных, чем Markdown pandoc, будут с потерями.

Конечно, ссылочное имя является специфической функцией Markdown.Тем не менее, Markdown поддерживает представление ссылок несколькими способами, и поддержка имен ссылок не требуется для поддержки действительного документа Markdown.Поэтому ссылочные имена - это одна из вещей, которую Pandoc теряет.

Но почему Pandoc нужно проходить через AST, если он просто выводит тот же формат.Потому что так оно и спроектировано.См. документацию API для получения дополнительной информации об этом.

...