2016-05-09 5 views
9

HTML形式のRMarkdownスクリプトの場合、キャプションに数字を付ける方法を知っている人はいますか?Rmarkdown HTML数値図

は、PDF文書の場合は、キャプションは何かのように言うだろう。しかし

Figure X: Some Caption Text 

、HTML版の同等のキャプションは、単に

Some Caption Text 

これは数で相互参照数字を作ると言うだろう完全に役に立たない。

次のように

マイRMDヘッダーディレクティブは、次のとおりです。

だから、
--- 
title: 
    "My Title" 
author: 
    "Me" 
date: 
    "1/1/2016" 
output: 
    pdf_document: 
    toc: false 
    number_sections: true 
    fig_caption: true 
    html_document: 
    toc: true 
    number_sections: true 
    fig_caption: true 
--- 

答えて

2

誰かがよりよい解決策を持っていない限り、これは私が思いついた解決策であれば、このアプローチにはいくつかの欠陥が、例えば(があります図/表番号はセクション番号などに依存しています...)が、基本的なHTML文書では機能します。あなたの文書の上部にあるどこか

、これを実行します。

```{r echo=FALSE} 
#Determine the output format of the document 
outputFormat = opts_knit$get("rmarkdown.pandoc.to") 

#Figure and Table Caption Numbering, for HTML do it manually 
capTabNo = 1; capFigNo = 1; 

#Function to add the Table Number 
capTab = function(x){ 
    if(outputFormat == 'html'){ 
    x = paste0("Table ",capTabNo,". ",x) 
    capTabNo <<- capTabNo + 1 
    }; x 
} 

#Function to add the Figure Number 
capFig = function(x){ 
    if(outputFormat == 'html'){ 
    x = paste0("Figure ",capFigNo,". ",x) 
    capFigNo <<- capFigNo + 1 
    }; x 
} 
``` 

を次に、あなたの文書の途中で、あなたがフィギュアプロットしたいと言う場合:

```{r figA,fig.cap=capFig("My Figure Caption") 
base = ggplot(data=data.frame(x=0,y=0),aes(x,y)) + geom_point() 
base 
``` 

代替をcapFigへ上記のcapTab、テーブルキャプションが必要な場合

+0

私はまた、そのようなものを使用します。私は問題はまだ数字を参照することができないことだと思います。 –

+0

'kfigr'パッケージを使って、 ' refFig = function(x、prefix = TRUE){x = prefix(x、prefix = prefix、link = FALSE、type = 'Figure')}のような関数を作成できます。 ; (x、接頭辞=接頭辞、リンク= FALSE、型= '表'); refTab =関数(x、接頭辞= TRUE)x: ; x} ' 次に、htmlとlatexの両方の出力に有効な' r refFig( 'mylabel') ''を呼び出します。 –

2

数字、表、セクション、および方程式の相互参照を可能にし、すべての出力形式で動作するフィルタであるpandoc-crossrefを使用できます。最も簡単な方法は、各プロットの後にcatフィギュアラベル({#fig:figure_label}の形式)ですが、これにはecho=FALSEresults='asis'が必要です。次に、数字を参照することができます。[@fig:figure_label]はデフォルトでfig. figure_numberです。これはプロット我々は、図1に見ることができるような一つ

:グラフィック

PLOT1

図1を除去する生成

--- 
output: 
    html_document: 
    toc: true 
    number_sections: true 
    fig_caption: true 
    pandoc_args: ["-F","pandoc-crossref"] 
--- 

```{r} 
knitr::opts_chunk$set(echo=FALSE,results='asis') 

``` 


```{r plot1,fig.cap="This is plot one"} 
x <- 1:10 
y <- rnorm(10) 
plot(x,y) 
cat("{#fig:plot1}") 

``` 

As we can see in [@fig:plot1]... whereas [@fig:plot2] shows... 

```{r plot2, fig.cap="This is plot two"} 
plot(y,x) 
cat("{#fig:plot2}") 

``` 

(:ここ

はMWEあります1 ...図2は...

PLOT2

図2:これは、プロット2

では、より多くのオプションやカスタマイズのためのpandoc-crossref readmeを参照してください。

あなたはHaskellのインストールを持っていると仮定すると、pandoc-のcrossRefをインストールするには:

cabal update 
cabal install pandoc-crossref 
0

この問題はbookdownで解決されました。それはまだ安定していませんが、確かに試してみる価値があります。

0

Captionerは、別のオプション(テストされていません)です。

0

上記のNicholasが投稿したのと同様のソリューションを使用して相互参照を解決します。私はいくつかのプロジェクトでブックダウンを使用していますが、単純な相互参照が必要な他のプロジェクトに使用するのは面倒です。

私はrmarkdownを使って論文を書いているときに以下を使用します。標準形式でジャーナルに提出したいと思います。私は最後に数字の伝説が、その後テーブルが必要です、そして、私はテーブルと数字を持っていきます。私が書いているように、私は、数字がテキスト内でどのような順序で参照されるのかという大まかな考え方しか持っていません。 fig:foobarのようなテキストコードでそれらを参照し、そのテキストに基づいて番号を割り当てます。 Figureの凡例リストを見ると、凡例をどのような順序で並べるかがわかり、必要に応じて凡例を移動します。

私の構造は次のとおりです。

私は、さまざまな参考文献やヘルパーR機能のような論文に必要なものを持っているRパッケージを持っています。そのパッケージでは、主なRmd環境で定義されているいくつかの変数:.rmdenvirと.rmdctrを使用する次の関数があります。 FOO、例えば図について::FOO

ref <- function(useName) { 
require(stringr) 
if(!exists(".refctr")) .refctr <- c(`_` = 0) 
if(any(names(.refctr)==useName)) return(.refctr[useName]) 
type=str_split(useName,":")[[1]][1] 
nObj <- sum(str_detect(names(.refctr),type)) 
useNum <- nObj + 1 
newrefctr <- c(.refctr, useNum) 
names(newrefctr)[length(.refctr) + 1] <- useName 
assign(".refctr", newrefctr, envir=.rmdenvir) 
return(useNum) 
} 

それは私が私がcntnameようなもので、参照したいものに名前を付けることを前提としています。それはそれぞれのために新しいカウンターを作り、必要に応じて新しいカウンターを手書きで書いています。私のメインのRMDファイルで

、私はいくつかのセットアップ回線持っている:私はあなたが私がしようとしているものを見ることができます」を取得するには、以下の

You can see what I am trying to show in Figure `r ref("fig:foo")` 
    and you can see it also in Tables `r ref("tab:foo")` 
    and A`r ref("tabappA:foobig")`. 

を使用したテキストで

```{r setup_main} 
    require(myPackageforPapers) 
    # here is where the variables needed by ref() are defined. 
    .rmdenvir = environment() 
    .refctr <- c(`_` = 0) 
    ```` 

を図1に示されています。また、表1と表1にも示されています。数字は1ではないかもしれませんが、使用する番号が動的に決定されます。私は最初に特別な機能を使用する必要はありません、私は図、テーブル、または何かを数えています。 ref()はラベルがすでに存在するかどうかを調べることによってそれを示します。そうでない場合は、次の番号を割り当てて返します。したがって、ある場所では「ラベル」を、別の場所では「参照」を使用する必要はありません。

執筆の過程で、私は私がする必要があるのは

You can see what I am trying to show in Figure `r ref("fig:foo")` 
    and you can see it also in Tables `r ref("tab:foo")` 
    and B`r ref("tabappB:foobig")`. 
に上記の変更であるAが大きすぎるなって、と私は付録Bにテーブルの一部をオフに分割することをしている付録を決めるかもしれません

新しいカウンタ名 'tabappB'を指定するだけで、その数が動的に決定されます。

:私のRMDファイルの終わりに

、私はその後、私のテーブルはとても

```{r print-tablefoo, echo=FALSE} 
    tablefoo=mtcars 
    thecap = "Tables appear with a legend while figures do not." 
    fullcap = paste("Table ", ref("tab:foo"), ". ", thecap, sep="") 
    kable(tablefoo, caption=fullcap) 
    ``` 

のように表示され、その後の数字そうのような

# Figure Legends 

    Figure `r ref("fig:foo")`. This is the legend for this figure. 

    Figure `r ref("fig:foo2")`. This is the legend for another figure. 

のようになります。数字のリストを持っています

```{r fig-foo, echo=FALSE, fig.cap=paste("Figure",ref("fig:foo"))} 
    plot(1,1) 
    ``` 

付録Aは子として含まれているRmdファイルです。それは私が表A1を取得するには、「A」を追加する必要がありますが、私はそれが簡単にRが私のカウンターを標識するという点で、私にとってあまり考えていない場合は見つける

```{r print-tableAfoo, echo=FALSE} 
    tablefoo=mtcars 
    thecap = "This is a legend." 
    fullcap = paste("Table A", ref("tabappA:foobig"), ". ", thecap, sep="") 
    kable(tablefoo, caption=fullcap) 
    ``` 

のようなテーブルを持っています。私はちょうど正しい番号を返すようにしたい。

相互参照は、html、pdf/latex、またはwordで動作します。私はラテックスのソリューションに喜んで付きますが、私の共著者は言葉を使うので、私はpandocとwordで動作するソリューションが必要です。また、htmlや他の出力が必要な場合もありますし、rmarkdownで動作するすべての出力に対応するソリューションが必要です。

関連する問題