Как использовать номера разделов LaTeX в перекрестной ссылке Pandoc - PullRequest
0 голосов
/ 10 января 2019

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

# This is my header {#header}

Создает идентификатор со значением «#header», который можно восстановить в тексте, например:

[Link to header](#header)

Который будет отображать текст «Ссылка на заголовок» со ссылкой на заголовок.

Я нигде не мог найти, как сделать текст ссылки номером раздела при компиляции в виде документа LaTeX.

Например, если мой заголовок скомпилирован в «1.2.3 Заголовок раздела», я хочу, чтобы моя перекрестная ссылка на текст отображалась как «1.2.3».

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Общее решение, которое работает со всеми поддерживаемыми форматами вывода, может быть построено путем использования pandoc Lua filters : Функция pandoc.utils.hierarchicalize может использоваться для получения иерархии документов. Мы можем использовать это, чтобы связать идентификаторы разделов с номерами разделов, которые впоследствии можно будет использовать для добавления этих номеров в ссылки без описания ссылок (например, [](#myheader)).

local hierarchicalize = (require 'pandoc.utils').hierarchicalize

local section_numbers = {}

function populate_section_numbers (doc)
  function populate (elements)
    for _, el in pairs(elements) do
      if el.t == 'Sec' then
        section_numbers['#' .. el.attr.identifier] = table.concat(el.numbering, '.')
        populate(el.contents)
      end
    end
  end

  populate(hierarchicalize(doc.blocks))
end

function resolve_section_ref (link)
  if #link.content > 0 or link.target:sub(1, 1) ~= '#' then
    return nil
  end
  local section_number = pandoc.Str(section_numbers[link.target])
  return pandoc.Link({section_number}, link.target, link.title, link.attr)
end

return {
  {Pandoc = populate_section_numbers},
  {Link = resolve_section_ref}
}

Вышеуказанное должно быть сохранено в файл, а затем передано в pandoc с помощью опции --lua-filter.

Пример

Используя пример из вопроса

# This is my header {#header}

## Some subsection

See section [](#header), especially [](#some-subsection)

Используя вышеупомянутый фильтр, последняя строка будет отображаться как «Смотрите раздел 1, особенно 1.1».

Не забудьте вызвать pandoc с параметром --number-sections, иначе заголовки не будут пронумерованы.

0 голосов
/ 10 января 2019

Это может быть достигнуто путем определения идентификатора, как было сделано ранее. например:

# This is my header {#header}

Тогда в тексте перекрестная ссылка может быть записана как:

\ref{header}

Когда это компилируется в LaTeX, текст перекрестной ссылки будет номером раздела ссылочного заголовка.

...