我正在用 Sweave ( knitr
) 写一篇文章,这是一个从统计语言R
到 TeX 的翻译器。每当我在 Sweave 中生成一个图形时,它都会返回类似以下图形代码的内容。
\begin{figure}
\begin{knitrout}\small
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}
{
\centering \includegraphics[width=\marginparwidth]{example-image-a}
}
\end{knitrout}
\caption{A caption.}
\label{fig:a-label}
\end{figure}
我想要做的是使用类似于以下的解决方案marginfigure
通过包实现自定义环境scrlayer-notecolumn
这里。但是,我遇到了Too many {'s.
无法恢复的错误。
我想要的是这样的:
\begin{marginfigure}
\begin{knitrout}\small
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}
{
\centering \includegraphics[width=\marginparwidth]{example-image-a}
}
\end{knitrout}
\end{marginfigure}
我对marginfigure
环境进行了如下编码:
\usepackage{environ}
\makeatletter
\NewEnviron{marginfigure}{%
\expandafter\@marginfigure\expandafter{\BODY}%
}
\newcommand*\@marginfigure[1]{%
\makenote*{%
\begin{nonfloatfigure}#1\end{nonfloatfigure}%
}%
}
\newenvironment{nonfloatfigure}{%
\par\noindent\begin{minipage}{\linewidth}
\def\@captype{figure}%
}{%
\end{minipage}
}
正在做
\makenote*{
\begin{knitrout}\small
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}
{
\centering \includegraphics[width=\marginparwidth]{example-image-a}
}
\end{knitrout}
}
另一方面,工作得很好。
以下是不起作用的示例:
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{environ}
\makeatletter
\NewEnviron{marginfigure}{%
\expandafter\@marginfigure\expandafter{\BODY}%
}
\newcommand*\@marginfigure[1]{%
\makenote*{%
\begin{nonfloatfigure}#1\end{nonfloatfigure}%
}%
}
\newenvironment{nonfloatfigure}{%
\par\noindent\begin{minipage}{\linewidth}
\def\@captype{figure}%
}{%
\end{minipage}
}
\newenvironment{knitrout}{}{} % provided from Sweave
\title{Hello}
\author{Me}
\begin{document}
\maketitle
% Does not work
\begin{marginfigure}
\begin{knitrout}\small
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}
{
\centering \includegraphics[width=\marginparwidth]{example-image-a}
}
\end{knitrout}
\end{marginfigure}
\end{document}
答案1
您的环境包含段落。这意味着内部命令应该很长,因此不要使用带星号的 \newcommand:
\documentclass{scrartcl}
\usepackage{scrlayer-scrpage}
\usepackage{scrlayer-notecolumn}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{environ}
\makeatletter
\NewEnviron{marginfigure}{%
\expandafter\@marginfigure\expandafter{\BODY}%
}
\newcommand\@marginfigure[1]{% not \newcommand*
\makenote*{%
\begin{nonfloatfigure}#1\end{nonfloatfigure}%
}%
}
\newenvironment{nonfloatfigure}{%
\par\noindent\begin{minipage}{\linewidth}
\def\@captype{figure}%
}{%
\end{minipage}
}
\newenvironment{knitrout}{}{} % provided from Sweave
\title{Hello}
\author{Me}
\begin{document}
\maketitle
% Does not work
\begin{marginfigure}
\begin{knitrout}\small
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}\color{fgcolor}
{
\centering \includegraphics[width=\marginparwidth]{example-image-a}
}
\end{knitrout}
\end{marginfigure}
\end{document}