如何在Pandoc交叉引用中使用LaTeX节号

时间:2019-01-10 12:12:40

标签: latex markdown pandoc

Pandoc documentation说,可以通过多种方式对节标题进行交叉引用。例如,您可以创建自己的ID并引用该ID。例如:

# This is my header {#header}

将创建一个值'#header'的ID,该ID可以在文本中引用,例如:

[Link to header](#header)

这将显示文本“链接到标题”以及指向标题的链接。

当编译为LaTeX文档时,我找不到任何地方如何使链接的文本成为部分编号。

例如,如果我的标题被编译为“ 1.2.3节标题”,我希望对文本的交叉引用显示为“ 1.2.3”。

4 个答案:

答案 0 :(得分:3)

const arr = [ { date: '2020-05-03', items: [{}] }, { date: '2020-05-02', items: [{}] } ] function checkAndAdd(date) { const res = arr.find(ob => ob.date === date); // console.log(res); // based on the added comments. // if date is found, push something to the items, list: if (res) { res.items.push('Hello'); } else { arr.push({ date, items: [{}] }) } console.log('finalArray', arr); } checkAndAdd('2020-05-03'); checkAndAdd('2020-05-06');版本2.8起,功能pandoc已被pandoc.utils.hierarchicalize取代。这是the @tarleb's answer的更新版本,可与较新的“ pandoc”版本一起使用。

make_sections

答案 1 :(得分:1)

这可以通过定义ID来实现,如之前所做的那样。例如:

# This is my header {#header}

然后在文本中,交叉引用可以写为:

\ref{header}

当编译为LaTeX时,交叉引用文本将为引用标题的节号。

答案 2 :(得分:1)

您可以使用pandoc-secnos过滤器套件中的pandoc-xnos过滤器。

标题

#include <iostream>

int main(int argc, char **argv)
{
    std::cout << 25u - 50;
    return 0;
}
使用# This is my header {#sec:header} 引用

。或者,您可以参考

@sec:header

使用# This is my header

可以通过向@sec:this-is-my-header调用中添加--filter pandoc-secnos来处理以此方式编码的Markdown文档。 pandoc选项也应使用。输出使用LaTeX的本机命令(即--number-sections\label\ref)。

此方法的好处是,还可以其他格式(html,epub,docx等)输出。

答案 3 :(得分:0)

可以利用pandoc Lua filters来构建适用于所有受支持的输出格式的通用解决方案:函数pandoc.utils.hierarchicalize可用于获取文档层次结构。我们可以使用它来将区段ID与区段编号相关联,以后可以使用这些编号将这些编号添加到没有链接描述的链接中(例如[](#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}
}

以上内容应保存到文件中,然后通过--lua-filter选项传递给pandoc。

示例

使用问题中的示例

# This is my header {#header}

## Some subsection

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

使用上述过滤器,最后一行将显示为“请参见第1节,尤其是1.1”。

不要忘记使用选项--number-sections调用pandoc,否则标题将不会编号。