рисунок * окружение в двухколоночном вязании / Sweave документ - PullRequest
4 голосов
/ 24 января 2012

Похоже, это должно быть обычной проблемой, но я не нашел очевидного трюка. Рассмотрим файл knitr Rnw ниже,

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

Мне бы хотелось, чтобы эта широкая фигура охватывала два столбца с использованием {figure*} среды LaTeX. Есть ли для этого крючок?

РЕДАКТИРОВАТЬ: упаковка фрагмента в figure* дает следующий вывод.

enter image description here

Ответы [ 3 ]

6 голосов
/ 24 января 2012

Два факта:

  1. knitr делает все доступным для вас, поэтому трюки с LaTeX часто не нужны;
  2. есть chunk крюк с помощью которого вы можете обернуть результаты своего чанка;

Простые решения:

knit_hooks$set(chunk = function(x, options) {
                       sprintf('\\begin{figure*}\n%s\n\\end{figure*}', x)
})

Я оставляю вам остальную часть работы, чтобы позаботиться о более подробной информации в options (например, когда options$fig.keep == 'none', вы не должны переносить вывод в figure*).Возможно, вы захотите посмотреть, как крючок chunk по умолчанию для LaTeX определен в knitr, чтобы лучше узнать, как работает ловушка chunk.

Однако в этом случае якак правило, сам пишу код LaTeX в документе, а не создаю его автоматически.Получив figure*, вы можете начать думать о \caption{} и \label{} ( не сложно , но я все еще хочу видеть их в LaTeX).

2 голосов
/ 24 января 2012

Не уверен насчет того, как knitr, но для Sweave (и основного латекса) на самом деле есть хитрость: пусть код R создает PDF-файл, а затем использует стандартный \includegraphics для его извлечения.

Итак, с этим:

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

я получил документ ниже (который я затем преобразовал из pdf в png):

enter image description here

1 голос
/ 06 апреля 2016

У меня также была похожая проблема при подготовке рисунка, который должен занимать два столбца в документе IEEE с двумя столбцами.

Установка ловушки чанка привела к некоторой странной ошибке в моей настройке. Даже этот простой крюк: knit_hooks$set(chunk = function(x, options) x)

Но, взглянув на knitr::opts_chunk$get(), я понял, что простая установка fig.env="figure*" решает проблему элегантным способом.

Вот как выглядит мой кусок в файле Rnw:

<<fig1, fig.width=18, fig.height=6, fig.env="figure*">>=
@
...