2016-11-25 5 views
3

は私がyamlのWindows変数( "%userprofile%")?私のYAMLコールで

--- 
title: "`r paste0('Test. Done ', format(Sys.Date(), '%B-%Y'))`" 
output: 
    word_document: 
    fig_caption: yes 
    fig_height: 4 
    fig_width: 7 
    reference_docx: %userprofile%\Documents\template.docx 
--- 

持っていますが、YAMLを約%userprofile%文句を言います。そのような変数を含めることは可能ですか?

私はこれを試しました。

reference_docx: "`r file.path(path.expand('~'), 'skabelon.docx')`" 

しかし、それでもこのYAMLエラーが発生します。

私はこの式がyamlの前に処理されていないと思いますか?私は、ファイルがそこにあることを確認しました...またはpandocが別の 'userprofile'を使用していますか?どうすればこのことを確認できますか?

ただし、上記の更新されたタイトルに従って、Title変数でこのような呼び出しを使用することはできます。私はこれが特定のニットの問題でなければならないと思う。

+0

2番目の入力にはYAMLエラーが発生します。 – flyx

+0

質問を更新しました@flyx – Andreas

答えて

3

outputフィールドのパラメータは、rmarkdownによってのみ理解されます。 Pandocはそれらを理解していないので、rmarkdownが式を評価できることを確認する必要があります。 rmarkdownは、例えば、R表現の構文は!exprで、あなたは!expr後にRの表現を置くことができるのYAML YAMLのメタデータを読み込むためのパッケージ、およびYAMLを使用していますので、

output: 
    word_document: 
    fig_caption: yes 
    fig_height: 4 
    fig_width: 7 
    reference_docx: !expr file.path(Sys.getenv('USERPROFILE'), 'Documents', 'template.docx') 
+0

これは@Yihuiで動作します。しかし、これは "!expr"が "r"に取って代わることを意味しますか?私はこれがyamlパッケージに書かれていますが、他の場所には書かれていません。私の例では "r"は日付フィールドでは動作しますが、!exprでは動作しません。一方 !exprはreference_docxで動作しますが、「 'r」は動作しません。違いはなんですか? – Andreas

+0

良い質問です。 'r'構文はknitrによってのみ理解されます。あなたの場合、あなたはそれがR式であることをrmarkdownが理解するようにします。 rmarkdownはyamlを使ってYAMLメタデータを解析し、yamlは '!expr'しか理解できません。 –

0

このような変数を含めることができますが、配置するスカラー(一重引用符または二重引用符)を引用する必要があります。 %が単一引用符を二重引用符で囲まれた文字列内の単一引用符で囲まれた文字列で(持っている、またはバックスラッシュ(\)特別な意味を持ちません。

にそのスカラーの任意の更なる解釈をWindowsの変数が外であるとして引用スカラー以内YAMLの範囲と、プログラムによって行われる必要がある

スカラー:。

"`r file.path(path.expand('~'), 'skabelon.docx')`" 

は正しいYAMLで、エラーをスロー(もちろんのブーフよりもYAMLのために何もありません叫びますバッククォートで始まり終わる文字、解釈はありませんbパーザによってそのことが行われます)。

+0

よろしくお願いいたします。今のところ私はそのニットの問題であると仮定しています – Andreas

+0

YAMLは完全に解析され、knitrに渡されます。これはバッククォートで何もしないような特定の構文を必要とします。私はまず、バッククォートなしでYAMLスカラーの正しいパスをハードコードし、その後、knitrが評価できるもので部品を徐々に置き換えて、それがまだ動作することを確認します。 – Anthon

+0

タイトルの値をreference_docxの値に置き換え、コールの出力をreference_docxの値にハードコードすると、正しいパスがタイトルに表示されます(例:https://i.imgur.com/5JkCVoN)。 png)。だから私はそれがニットの問題でなければならないと思う。 – Andreas