HTML-гиперссылки в формате PDF не сохраняются - PullRequest
0 голосов
/ 24 октября 2018

У меня есть несколько URL-адресов в формате html в моих файлах .Rmd, которые исчезают в сгенерированном PDF.Похоже, что ссылка игнорируется, и в PDF-файле отображается только текст, который должен связать ссылку.

Например, <a href="https://www.cygwin.com" target="_blank">Cygwin</a> просто отображается как Cygwin (без гиперссылки).

Но когда веб-сайт соответствует отображаемому тексту, он работает нормально (например: <a href="https://www.cygwin.com" target="_blank">https://www.cygwin.com</a>), возможно потому, что текст является самой ссылкой.

Есть ли способ сохранить сохранениеэти html-гиперссылки в выводе PDF?

Я выполняю следующее для создания PDF в R Studio:

    render_book("index.Rmd", "bookdown::pdf_book")

И верхняя часть index.Rmd выглядит следующим образом:

    title: "My Title"
    site: bookdown::bookdown_site
    documentclass: book
    link-citations: yes
    output:
      bookdown::pdf_book:
        pandoc_args: [--wrap=none]
    urlcolor: blue

1 Ответ

0 голосов
/ 24 октября 2018

Pandoc, а в расширении R Markdown просто хранит необработанный HTML-код ссылок.Необработанные фрагменты HTML выводятся в форматы, поддерживающие HTML (например, epub), но не для LaTeX (который используется для генерации PDF).Pandoc просто проанализирует содержимое ссылки, поэтому она работает, если текст вашей ссылки является URL-адресом.

Самым простым решением, конечно, будет использование синтаксиса Markdown для ссылок, чтовыразительный как HTML: [Cygwin](https://www.cygwin.com){target="_blank"}.Однако, если это не вариант, то все становится немного странно.

Вот метод, который все еще анализирует эти ссылки.Он использует Lua filter для преобразования необработанного HTML в правильную ссылку.Просто сохраните следующий скрипт как parse-html-links.lua в том же каталоге, что и ваш Rmd-файл, и добавьте '--lua-filter=parse-html-links.lua' в список pandoc_args.

local elements_in_link = {}
local link_start
local link_end

Inline = function (el)
  if el.t == 'RawInline' and el.format:match'html.*' then
    if el.text:match'<a ' then
      link_start = el.text
      return {}
    end
    if el.text:match'</a' then
      link_end = el.text
      local link = pandoc.read(link_start .. link_end, 'html').blocks[1].content[1]
      link.content = elements_in_link
      -- reset
      elements_in_link, link_start, link_end = {}, nil, nil
      return link
    end
  end
  -- collect link content
  if link_start then
    table.insert(elements_in_link, el)
    return {}
  end
  -- keep original element
  return nil
end
...