我正在尝试使用lstlisting
环境将 R 代码插入我的 LaTeX 文档。我无法弄清楚如何让 LaTeX 对这些方程式进行编号,以便我可以在文本后面引用它们。我想做这样的事情:
\begin{lstlisting}[language=R]
lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)
\end{lstlisting}\label{eq:lm.model}
要清楚——我知道我能做到这一点:
\begin{lstlisting}[language=R, caption={Standard Linear Regression Model Equation}, label=foobar]
lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)
\end{lstlisting}
但是,我想将公式编号放在公式的右边 - 而不是放在顶部的单独标题中,并且我希望能够在文本的后面引用它。
答案1
为了能够在 内创建 R 列表(或实际上任何列表)\begin{equation} ... \end{equation}
,您需要使用\lstinline
而不是 \begin{lstlisting} ... \end{lstlisting}
。要开始和结束代码片段,您可以使用任何字符不是在代码中使用。一个流行的选择是例如|
或$
:
\lstinline[language=R]|lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)|
但同样,只要该字符没有出现在您的代码片段中,就没关系。
为了能够将其放入\lstinline
等式中,您必须先“退出”数学模式,这样您就处于“正常”文本模式。这是通过 完成的\text{any content which is not math}
。所以,合起来,这是
\documentclass{article}
\usepackage{listings}
\usepackage{amsmath}
\begin{document}
As described in \eqref{eq:lm.eq:lm.model}, this is very important.
\begin{equation} \label{eq:lm.eq:lm.model}
\text{\lstinline[language=R]|lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)|}
\end{equation}
\end{document}
答案2
通常,对列表的引用要么是对整个列表(因此会有标题),要么是对列表内的行号。
下面我采用第二种方法,因为提供带有标题的单行列表似乎很奇怪。即使编号是在 上设置的left
,您也可以将其放在 上right
。请参阅部分5.6 行号的listings
文档有关列表内行号格式的更多选项。
\documentclass{article}
\usepackage[margin=1in]{geometry}% Just for this example
\usepackage{listings}
\lstnewenvironment{rcode}[1][]
{\lstset{
language=R,
numbers=left,
numberstyle=\footnotesize,
escapeinside=@@,
#1}}
{}
\newsavebox{\codebox}
\begin{document}
\begin{rcode}
lm.model <- lm(Total.Score ~ Game.Num, data = sid1133) @\label{r:lm.model-1}@
\end{rcode}
See Line~\ref{r:lm.model-1} or Line~\ref{r:lm.model-2}.
\begin{rcode}[firstnumber=200]
lm.model <- lm(Total.Score ~ Game.Num, data = sid1133) @\label{r:lm.model-2}@
\end{rcode}
\begin{lrbox}{\codebox}
\begin{lstlisting}[language=R]
lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)
\end{lstlisting}
\end{lrbox}
Alternatively, see~(\ref{eq:lm.model-1}):
\begin{equation}
\usebox{\codebox} \label{eq:lm.model-1}
\end{equation}
\begin{lrbox}{\codebox}
\lstinline[language=R]|lm.model <- lm(Total.Score ~ Game.Num, data = sid1133)|
\end{lrbox}
Alternatively, see~(\ref{eq:lm.model-2}):
\begin{equation}
\usebox{\codebox} \label{eq:lm.model-2}
\end{equation}
\end{document}
为了正确引用行号,你必须逃脱插入适当的\label
。
如果你确实希望将列表代码作为方程式包含,你可能需要考虑在设置之前将列表存储在一个框中(上面我使用\begin{lrbox}{\codebox}
... \end{lrbox}
)。请注意在lstlisting
环境和\lstinline
宏。
答案3
这个例子最好
\begin{equation}
\hbox{
\begin{lstlisting}
@@
(?:
(?<commandOrEnvironmentName>[a-zA-Z]+)
(?:@(?<groupingData>[,0-9\x20]+))?
)?
@@
(?<PLSQLexpresion>.+?)
@END@
(?<endlineChars>.*?\n|.*)
\end{lstlisting}}
\end{equation}