2017-09-13 1 views
4

ヘッダーレベルに従ってTOCを字下げしたい。Rmarkdown:HTML出力のTOC項目のインデント

マイドキュメント例は次のようになります。

# Tutorial 
## Start a new project 
### Project structure 
### Analysis code 

私はRmd文書をコンパイルしています:

enter image description here

しかし

rmarkdown::render("foo.Rmd", 
        output_options = HTMLlook, 
        output_file = "foo.html") 

HTMLlook <- list(toc = TRUE, 
       toc_depth = 5, 
       toc_float = list(collapsed = FALSE, 
            smooth_scroll = TRUE)) 

これは、TOCとドキュメントを生成し、IインデントされたTOC(インデント相当ヘッダーレベルまで)。 募集結果は次のようになります。 enter image description here

それはrenderでこのオプションを設定するか、多分それにCSSパラメータを渡すことは可能ですか?

答えて

5

私は組み込みのソリューションに気づいていません。しかし、ここで少し微調整です:

<script> 
    $(document).ready(function() { 
     $items = $('div#TOC li'); 
     $items.each(function(idx) { 
     num_ul = $(this).parentsUntil('#TOC').length; 
     $(this).css({'text-indent': num_ul * 10, 'padding-left': 0}); 
     }); 

    }); 
</script> 

があなたのヘッダの深さは、実際にTOCの内側にマッピングされています。レベルが下がるたびに、新しいul要素が作成されます。これが私たちがここで利用しているものです。具体的には:

文書は($(document).ready(....)のロードが終了しました:

  1. あなたが届くまで親要素の数をカウントし、各リスト項目のID TOC
  2. と要素内のすべてのリスト項目を選択しますidがTOCの要素。これは、ul要素の数です。
  3. 親の数に応じて現在のリスト項目のスタイルを変更します。

text-indentpadding-leftの2つのパラメータで再生することで、間隔を調整することができます。


MRE:

--- 
title: "Habits" 
author: Martin Schmelzer 
date: September 14, 2017 
output: 
    html_document: 
    toc: true 
    toc_depth: 5 
    toc_float: 
     collapsed: false 
     smooth_scroll: true 
--- 

<script> 
$(document).ready(function() { 
    $items = $('div#TOC li'); 
    $items.each(function(idx) { 
    num_ul = $(this).parentsUntil('#TOC').length; 
    $(this).css({'text-indent': num_ul * 10, 'padding-left': 0}); 
    }); 

}); 
</script> 

# In the morning 

## Waking up 

### Getting up 

#### Take a shower 

##### Make coffee 

# In the evening 

## Make dinner 

これが結果です:

enter image description here

+0

そのスクリプトは、同じ結果を得るためにPDFファイルに追加することができますか?もしそうなら、どこにPDFを置くべきでしょうか? – user3022875

+0

残念ながら。これはJavaScriptであり、HTMLベースの文書にのみ適用されます。 –

関連する問題