La documentation Pandoc indique que des références croisées peuvent être faites aux en-têtes de section de plusieurs manières. Par exemple, vous pouvez créer votre propre identifiant et référencer cet identifiant. Par exemple:
[Link to header](#header)
créera un identifiant avec la valeur '#header' qui peut être référencé dans le texte, comme tel:
# This is my header {#header}
Ce qui affichera le texte «Lien vers l'en-tête» avec un lien vers l'en-tête.
Je n'ai trouvé nulle part comment faire du texte du lien le numéro de section une fois compilé en tant que document LaTeX.
Par exemple, si mon en-tête est compilé en «1.2.3 Section Header», je souhaite que ma référence croisée au texte s'affiche sous la forme «1.2.3».
4 Réponses :
Ceci peut être réalisé en définissant l'ID comme précédemment. par exemple:
\ref{header}
Ensuite, dans le texte, la référence croisée peut être écrite comme suit:
# This is my header {#header}
Lorsque cela se compile en LaTeX, la croix- le texte de référence sera le numéro de section de l'en-tête référencé.
Une solution générale qui fonctionne avec tous les formats de sortie pris en charge peut être créée en utilisant les filtres pandoc Lua a >: La fonction pandoc.utils.hierarchicalize
peut être utilisée pour obtenir la hiérarchie des documents. Nous pouvons l'utiliser pour associer des identifiants de section à des numéros de section, qui pourront ensuite être utilisés pour ajouter ces numéros à des liens sans description de lien (par exemple, [] (# myheader)
). # This is my header {#header}
## Some subsection
See section [](#header), especially [](#some-subsection)
Enfin, j'ai assez de karma pour vous voter. Merci pour ce joli filtre! Pour référence future, il devrait être inclus dans le référentiel lua-filters de pandoc. À votre santé!
Merci @ A.M.! Tellement génial d'entendre que cela est utile :)
Vous pouvez utiliser le filtre pandoc-secnos , qui fait partie du pandoc-xnos suite de filtres.
L'en-tête
# This is my header
est référencé en utilisant @sec: header
. Alternativement, vous pouvez référencer
# This is my header {#sec:header}
en utilisant @sec:this-is-my-header
.
Documents Markdown codés en cette manière peut être traitée en ajoutant --filter pandoc-secnos
à l'appel pandoc
. L'option --number-sections
doit également être utilisée. La sortie utilise les commandes natives de LaTeX (c'est-à-dire \ label
et \ ref
ou \cref
).
L'avantage de cette approche est que la sortie dans d'autres formats (html, epub, docx, ...) est également possible.
Depuis pandoc
version 2.8, la fonction pandoc.utils.hierarchicalize
a été remplacée par make_sections
. Voici une version mise à jour de la réponse de @ tarleb qui fonctionne avec les nouvelles versions «pandoc».
local make_sections = (require 'pandoc.utils').make_sections local section_numbers = {} function populate_section_numbers (doc) function populate (elements) for _, el in pairs(elements) do if el.t == 'Div' and el.attributes.number then section_numbers['#' .. el.attr.identifier] = el.attributes.number populate(el.content) end end end populate(make_sections(true, nil, 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} }