上記の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で動作するすべての出力に対応するソリューションが必要です。
私はまた、そのようなものを使用します。私は問題はまだ数字を参照することができないことだと思います。 –
'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') ''を呼び出します。 –