Figure * Environnement dans un document en knitr / sweave à deux colonnes
Question
On dirait que cela devrait être un problème courant, mais je n'ai pas trouvé de truc évident. Considérez le fichier Knitr RNW ci-dessous,
\documentclass[twocolumn, 12pt]{article}
\usepackage{graphicx}
\begin{document}
%\SweaveOpts{dev=pdf, fig.align=center}
\begin{figure*}
<<aaa, fig.width=8, fig.height=5, fig.show=hold>>=
plot(1,1)
@
\end{figure*}
\end{document}
J'aimerais que ce chiffre large s'étende sur deux colonnes, en utilisant un {figure*}
Environnement de latex. Y a-t-il un crochet pour ça?
Edit: envelopper le morceau figure*
donne la sortie suivante.
La solution
Deux faits:
knitr
Rend tout accessible pour vous, donc les astuces en latex sont souvent inutiles;- Il y a un
chunk
accrocher avec lequel vous pouvez envelopper vos résultats de morceaux;
Une solutions simples est:
knit_hooks$set(chunk = function(x, options) {
sprintf('\\begin{figure*}\n%s\n\\end{figure*}', x)
})
Je vous laisse le reste du travail pour prendre soin de plus de détails options
(par exemple quand options$fig.keep == 'none'
, vous ne devriez pas envelopper la sortie figure*
). Vous voudrez peut-être voir comment le défaut chunk
accrocher car le latex est défini dans knitr
pour mieux savoir comment le chunk
Crochet fonctionne.
Cependant, dans ce cas, j'ai tendance à écrire le code latex par moi-même dans le document au lieu de le créer automatiquement. Après avoir eu figure*
, vous pouvez commencer à penser à \caption{}
et \label{}
(pas dur, mais je veux toujours les voir en latex).
Autres conseils
Je ne sais pas comment le knitr mais pour le sweave (et le latex de base), il y a en fait une astuce: demandez au code R de produire un fichier PDF, puis utilisez la norme \includegraphics
pour le tirer.
Donc avec ceci:
\documentclass[twocolumn, 12pt]{article}
\usepackage{graphicx}
\begin{document}
%\SweaveOpts{dev=pdf}
<<aaa,fig=FALSE,print=FALSE,echo=FALSE>>=
pdf("mychart.pdf", width=6, height=3)
set.seed(42)
plot(cumsum(rnorm(100)), type='l', main="yet another random walk")
invisible(dev.off())
@
\begin{figure*}
\includegraphics{mychart.pdf}
\end{figure*}
\end{document}
J'ai obtenu le document ci-dessous (que j'ai ensuite converti de PDF à PNG):
J'ai également eu un problème similaire lors de la préparation d'un chiffre qui devrait s'étendre sur deux colonnes dans un document de conférence à deux colonnes IEEE.
La définition du crochet de morceau a provoqué une erreur étrange dans ma configuration.Même ce crochet simple: knit_hooks$set(chunk = function(x, options) x)
Mais après avoir regardé dans knitr::opts_chunk$get()
, J'ai réalisé que le simple fait de définir fig.env="figure*"
résout le problème d'une manière élégante.
Voici à quoi ressemble mon morceau dans un fichier RNW:
<<fig1, fig.width=18, fig.height=6, fig.env="figure*">>=
@