Возможно, это не самое простое решение, но оно должно работать, даже если у вас есть разделы с одинаковыми именами на разных вкладках.Он адаптирован к вашему MRE, поэтому, возможно, придется вносить коррективы в зависимости от вашего реального приложения.
Я использовал Javascript для достижения того, что вы хотите.Просто добавьте код в начале вашего документа rmarkdown.
Надеюсь, комментарии достаточно ясно прояснят, что происходит.
<script type="text/javascript">
$(document).ready(function() {
var $tocItems = $(".tocify-subheader li.tocify-item"); // selector for all TOC items
var $tabs = $("a[role=\"tab\"]"); // selector for all tabs
var $panels = $("div[role=\"tabpanel\"]"); // selector for all tabpanels
$tocItems.hide(); // hide all TOC items
// get the tab name for each section header (e.g. mammals)
// and assign it to its corresponding toc item
$panels.find("div[data-unique]").each(function() {
var key = $(this).attr("data-unique");
var tab = $(this).closest("div[role=\"tabpanel\"]").attr("id");
$tocItems.filter("[data-unique=\"" + key + "\"]").attr("tab", tab)
})
// now each toc item knows to which tab panel it is pointing
// show the toc items that point to sections on the first panel
$tocItems.filter(function() {
return($(this).attr("tab") === $tabs.first().text());
}).toggle();
// assign an onclick event to the tabs..
$tabs.on("click", function() {
$tocItems.hide(); // ... hide all TOC items
var key = $(this).text(); // ... get the name of the tab clicked
$tocItems.filter(function() { // ... filter for the toc items pointing to that tab
return($(this).attr("tab") === key);
}).toggle(); // ... and show them
});
});
</script>