2015-10-20 14 views
9
file di

mio R Markdown (.RMD) si presenta così:Come far funzionare bm {} in un file markdown R (in HTML)?

--- 
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} 
\] 

L'uscita (ottenuto tramite R CMD build e la ricerca in ./inst/doc/*.html) è questo:

enter image description here

Per ottenere il corsivo grassetto vettori , Mi piacerebbe usare \bm{X} nel mio documento .Rmd, ma non riesce (anche se carico il pacchetto bm). Perché? Lo stesso accade senza la parte output: pdf_document.

UPDATE

Se sto correndo

--- 
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} 

ricevo (senza errori)

this

risposta

9

Credo che la vostra \[ \] e \begin{align} ... \end{align} sono ridondanti. Quando ho eseguito come scritto sopra ho avuto

! 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}

ha funzionato bene per me quando ho eliminato \begin{align} ... \end{align} ...

(sembra che un problema simile è sorto in your previous question troppo ...)

(Forse si stavano diventando errori che non hai notato e accidentalmente guardando una versione precedentemente compilata?)


Per quanto riguarda il motivo per cui non lo fai ge t l'output HTML corretto: sono abbastanza certo che MathJax (il motore utilizzato per il rendering di LaTeX incorporato in HTML prodotto da Rmarkdown) doesn't know about \boldmath; l'aggiunta del pacchetto al tuo input LaTeX non ti aiuterà, dovrai invece usare \mathbf e \boldsymbol. È possibile giocare here per vedere cosa funziona e cosa non: entrando

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

a quella pagina web dà

enter image description here

Linea di fondo, se si desidera che la matematica fantasia reso correttamente, è' Probabilmente è meglio attenersi all'output PDF.

+0

ho trovato Pandoc di essere schizzinosi. I blocchi _correct_ in lattice vengono passati solo attraverso. Errori di battitura, o doppio uso come in questo caso, o, ... tutti lo confondono. –

+0

Ciao Ben, Ciao Dirk, grazie per l'aiuto. Devo fare qualcosa di sbagliato in generale (attenzione: sono nuovo a R markdown) ... vedi il mio aggiornamento. Vorrei incappare in errori ... qual è il tuo flusso di lavoro? Il mio è: 1) Scrivi ./vignettes/foo.Rmd 2) R CMD build mypkg 3) Disimballare il pacchetto e aprire ./inst/doc/foo.html. Vorrei che ci fosse un modo più conveniente (sto usando Emacs). –

+0

La combinazione di '\ [.. \]' (o il non raccomandato '$$ .. $$') e '\ begin {align} ... \ end {align}' Ho trovato in vari posti online, ad es. http: // StackOverflow.it/questions/27081054/r-markdown-math-equation-allignment Chiaramente (da un punto di vista LaTeX) ridondante. –

7

Non penso che Mathjax (che è ciò che Pandoc usa nell'output HTML) possa \usepackage{}.Io lavoro in tutto questo avendo 2 file: uno chiamato preamble-mathjax.tex, uno chiamato preamble-latex.tex mio metadati YAML è configurato in questo modo (per):

E preamble-mathjax.tex ha (nota circostante \(\) in modo che mathjax analizza come la matematica blocco)

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

mentre preamble-latex.tex ha:

\usepackage{bm} 

In modo che w henever Io uso \bm{..} nel mio documento, funziona anche se compilo in HTML o PDF. (impilando lo con lo mathbf in modo che sia le lettere greche che le lettere normali siano rese in grassetto e le lettere in grassetto rimangano verticali come se fossero usate \bm).


periferica alla tua domanda: Alla fine si potrebbe desiderare di avere un terzo file, preamble-both.tex, con le macro che non sono pacchetti specifici (supponendo che il relativo preamble-* è già stato incluso) per esempio

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

E poi si includono questo con entrambi i formati di output. Ciò ti evita di scrivere tutti i tuoi macro due volte, una volta per html_document e ancora per pdf_document. Tuttavia, MathJax richiede che i macro siano circondati da \( e da \), mentre LaTeX eseguirà l'errore se questo è il caso.

L'unico modo che ho trovato per ovviare a questo è quello di avere un file contenente solo bracket-start.txt\( e un file contenente solo bracket-end.txt\), in modo che la mia YAML è:

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 

che è piuttosto ingombrante, ma funziona (c'è l'estensione Pandoc latex_macros, ma non ha mai funzionato per me)

+0

Ciao, grazie per l'aiuto, un sacco di buoni consigli anche qui ... –

+0

Questo funziona benissimo. Funziona anche durante il rendering usando 'bookdown'. –

+0

Ho dovuto modificare i delimitatori '\ (\)' quando si utilizza ** bookdown ** a '$$ $$', altrimenti funzionava perfettamente. – pjc42

1

Un'altra soluzione è usare l'argomento chunk figlio. Il rovescio della medaglia, che è piuttosto importante, è che funzionerà solo per la matematica circondata da $ $ o $$ $$. Non funzionerà nell'ambiente equazione. Il lato positivo è che non ottieni le tue definizioni "lampeggianti" nella parte superiore delle tue pagine html per un momento, cosa che mi capita con la soluzione sopra riportata.

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}} 
Problemi correlati