Rmarkdown: возможно ли отображать оглавление текущей вкладки только в наборе вкладок - PullRequest
0 голосов
/ 21 февраля 2019

Заголовок говорит сам за себя ...

Если у меня есть документ R-уценки, структурированный таксобаки, слоны ", когда активна первая вкладка, только" воробьи, ласточки ", когда активна вторая вкладка.

Заранее большое спасибо

1 Ответ

0 голосов
/ 21 февраля 2019

Возможно, это не самое простое решение, но оно должно работать, даже если у вас есть разделы с одинаковыми именами на разных вкладках.Он адаптирован к вашему 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>
...