2015-10-20 9 views
9

My R Markdown (.Rmd) Datei sieht wie folgt aus:Wie bekomme ich bm {} um in einer R Markdown (zu HTML) Datei zu arbeiten?

--- 
title: Foo 
author: Marius Hofert 
header-includes: 
    - \usepackage{bm} 
output: 
    pdf_document 
vignette: > 
    %\VignetteEngine{knitr::rmarkdown} 
    %\VignetteIndexEntry{Foo} 
--- 
\[ 
\begin{align} 
    \bm{U}=a\bm{X}\quad\boldmath{U}=a\boldmath{X}\quad\mathbf{U}=a\mathbf{X}. 
\end{align} 
\] 

Der Ausgang (erhalten über R CMD build und die Suche in ./inst/doc/*.html) ist dies:

enter image description here

Für Kursiv fett Vektoren bekommen Ich möchte \bm{X} in meinem Dokument .Rmd verwenden, aber es schlägt fehl (obwohl ich das Paket bm laden). Warum? Das gleiche passiert ohne den output: pdf_document Teil. Ich (ohne Fehler)

UPDATE

Wenn ich

--- 
title: Foo 
author: Marius Hofert 
header-includes: 
    - \usepackage{bm} 
output: 
    pdf_document 
vignette: > 
    %\VignetteEngine{knitr::rmarkdown} 
    %\VignetteIndexEntry{Foo} 
--- 
\[ 
\begin{align} 
    \bm{U}=a\bm{X}\quad\boldmath{U}=a\boldmath{X}\quad\mathbf{U}=a\mathbf{X}. 
\end{align} 
\] 

\[ 
    \bm{U}=a\bm{X}\quad\boldmath{U}=a\boldmath{X}\quad\mathbf{U}=a\mathbf{X}. 
\] 

\begin{align} 
    \bm{U}=a\bm{X}\quad\boldmath{U}=a\boldmath{X}\quad\mathbf{U}=a\mathbf{X}. 
\end{align} 

laufen

this

Antwort

9

Ich denke, Ihre \[ \] und \begin{align} ... \end{align} redundant sind. Als ich lief es wie oben geschrieben ich

bekam

! Package amsmath Error: Erroneous nesting of equation structures; (amsmath) trying to recover with `aligned'.

See the amsmath package documentation for explanation. Type H for immediate help. ...

l.84 \end{align}

funktionierte gut für mich, wenn ich \begin{align} ... \end{align} gelöscht ...

(Es scheint, dass ein ähnliches Problem auch in your previous question entstand ...)

(Vielleicht waren Sie Fehler erhalten, die Sie nicht bemerkt und waren auf der Suche versehentlich bei einer zuvor kompilierte Version?)


Soweit, warum Sie nicht ge t die richtige HTML-Ausgabe: Ich bin mir ziemlich sicher, dass MathJax (die Engine, die verwendet wird, um LaTeX in Rmarkdown-produziertem HTML zu rendern) doesn't know about \boldmath; Das Hinzufügen des Pakets zu Ihrem LaTeX-Eingang hilft nicht, stattdessen müssen Sie \mathbf und \boldsymbol verwenden. Sie können rund um here spielen, um zu sehen, was funktioniert und was nicht:

$\bm X \boldmath X \boldsymbol X \mathbf X$ 

auf dieser Webseite gibt

enter image description here

Unterm Strich eingeben, wenn Sie Lust auf Mathe richtig gemacht wollen, Sie‘ wahrscheinlich besser dran, um PDF-Ausgabe zu bleiben.

+0

ich pandoc wählerisch zu sein gefunden. Ich übergebe _correct_ latex blocs nur durch. Tippfehler, oder doppelte Verwendung wie in diesem Fall, oder ... alle verwirren es. –

+0

Hallo Ben, Hallo Dirk, danke für deine Hilfe. Ich muss generell etwas falsch machen (Achtung: Ich bin neu in R Markdown) ... siehe mein Update. Ich wünschte, ich würde auf Fehler stoßen ... was ist Ihr Workflow? Meine ist: 1) Schreibe ./vignettes/foo.Rmd 2) R CMD build mypkg 3) Entpacke das Paket und öffne ./inst/doc/foo.html. Ich wünschte, es gäbe einen bequemeren Weg (ich benutze Emacs). –

+0

Die Kombination '\ [.. \]' (oder das nicht empfohlene '$$ .. $$') und '\ begin {align} ... \ end {align}' habe ich an verschiedenen Stellen gefunden online, zB http: // stackoverflow.com/questions/27081054/r-markdown-math-equation-allignment Klar (aus LaTeX-Sicht) redundant. –

7

Ich glaube nicht, dass Mathjax (das ist, was Pandoc in HTML-Ausgabe verwendet) \usepackage{}.Ich dieses Problem umgehen, indem 2-Dateien mit: ein preamble-mathjax.tex genannt, nennt man preamble-latex.tex Meine YAML Metadaten wie diese eingerichtet ist (für):

Und preamble-mathjax.tex hat (Anmerkung umgebende \(\) so parst dass Mathjax als Mathe Block)

\(
\newcommand{\bm}[1]{\boldsymbol{\mathbf{#1}}} 
\) 

während preamble-latex.tex hat:

\usepackage{bm} 

Damit w immer wenn ich \bm{..} in meinem Dokument verwende, funktioniert es, ob ich nach HTML oder PDF kompiliere. (stapeln Sie die boldsymbol mit der mathbf so, dass sowohl griechische Buchstaben und normale Buchstaben fett gedruckt werden, und fettgedruckte Buchstaben aufrecht bleiben, als wenn Sie \bm verwenden würden).


Peripheral auf Ihre Frage: Schließlich möchten Sie vielleicht eine dritte Datei haben, preamble-both.tex, mit Makros, die nicht paketspezifische (unter der Annahme der entsprechenden preamble-* bereits aufgenommen worden) sind z.B.

\newcommand{\bX}{\bm{X}} % bold X 
\newcommand{\R}{\mathbb{R}} % real numbers 

Und dann schließen Sie diese mit beiden Ausgabeformate. Dies erspart Ihnen, alle Ihre Makros zweimal zu schreiben, einmal für html_document und erneut für pdf_document. MathJax erfordert jedoch, dass die Makros von \( und \) umgeben sind, während LaTeX in diesem Fall einen Fehler erkennt.

Der einzige Weg, die ich gefunden habe, dies zu umgehen ist eine Datei bracket-start.txt nur \( und eine Datei nur \) enthalten haben bracket-end.txt enthält, so dass mein YAML ist:

output: 
    html_document: 
     includes: 
     before_body: [preamble-mathjax.tex, bracket-start.txt, preamble-both.tex, bracket-end.txt] 
    pdf_document: 
     includes: 
     in_header: preamble-latex.tex 
     before_body: preamble-both.tex 

die ziemlich unhandlich ist, aber es funktioniert (es gibt die Pandoc latex_macros Erweiterung, aber es hat nie für mich gearbeitet)

+0

Hallo, danke fürs Helfen, viele gute Tipps auch hier ... –

+0

Das klappt super. Funktioniert auch beim Rendern mit 'Bookdown'. –

+0

Ich musste die '\ (\)' Trennzeichen ändern, wenn ich ** bookdown ** zu '$$ $$' benutze, ansonsten funktionierte einwandfrei. – pjc42

1

Eine andere Lösung ist, das Kind Brocken Argument zu verwenden. Der Nachteil ist, dass es nur für Mathematik funktioniert, die von $ $ oder $$ $$ umgeben ist. Es wird nicht in der Gleichungsumgebung funktionieren. Der Vorteil ist, dass Sie Ihre Definitionen für einen Moment nicht oben auf Ihren HTML-Seiten "blinken" lassen, was mir bei der obigen Lösung passiert.

demo.Rmd

--- 
title: Foo 
output: 
    pdf_document: default 
    html_document: default 
--- 

```{r child = 'defs.tex'} 
``` 

My math definitions are in defs.tex. Now I can use the defs in equations 
but they need to be in math mode for html output. This works for both 
pdf and html: 
$\AA^\top\BB$ and 
$$\AA^\top\BB$$ 

But using your new commands in the equation environment 
only works for pdf output because pandoc will not expand the 
definitions if the newcommands are not in $ $ or $$ $$.  

\begin{equation} 
\AA^\top\BB 
\end{equation} 

defs.tex

\newcommand{\BB}{\mathbf{B}} 
\newcommand{\CC}{\mathbf{C}} 
\renewcommand{\AA}{\mathbf{A}} 
Verwandte Themen