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.

enter image description here

Était-ce utile?

La solution

Deux faits:

  1. knitr Rend tout accessible pour vous, donc les astuces en latex sont souvent inutiles;
  2. 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):

enter image description here

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*">>=
@
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top