一位裁判注意到我使用的代码清单中的 <<-
(分配给全局)和(矩阵乘法)运算符是错误的。%*%
我使用的是标准 listings 包(版本 1.4,发布日期为 2007/02/22,来自 Ubuntu 12.10 上的 texlive 20120611)。下面是一个例子。在这两种情况下第二使用<
或%
似乎使用了正确的字体,但第一个没有。
这些运算符在文件中定义lstlang3.sty
为
otherkeywords={!,!=,~,$,*,\&,\%/\%,\%*\%,\%\%,<-,<<-,_,/},%
在这个简短的例子中,我甚至定义了一个简单的自定义语言定义。通过定义%*%
为,otherkeyword
我解决了一半的问题——但我无法同时修复<<-
和:一旦添加,它就会在内部匹配。这看起来像是一个错误。有谁可以追踪它?<-
<-
<<-
代码:
\documentclass[12pt]{article}
\usepackage{listings}
\lstdefinelanguage{customR}{ % defined a new R entry
keywords={t},
otherkeywords={<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries
}
\lstdefinelanguage{customRtwo}{
otherkeywords={<-,<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries
}
\begin{document}
\lstset{language=R,caption={Standard R}}
\begin{lstlisting}[frame=tb]
S <- H %*% t(pprd) %*% t(H) + R
xest <<- xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\lstset{language=customR,caption={Custom R}}
\begin{lstlisting}[frame=tb]
S <- H %*% t(pprd) %*% t(H) + R
xest <<- xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\lstset{language=customRtwo,caption={Custom R (alt.)}}
\begin{lstlisting}[frame=tb]
S <- H %*% t(pprd) %*% t(H) + R
xest <<- xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\end{document}
输出(此处渲染为 png)
总之:
- 默认情况下,和
<<-
都是%*%
错误的 - 我设法修复了
<<-
,%*%
但是...... - ...我似乎无法修复
<<-
和<-
任何帮助将不胜感激。
编辑:结尾}
当然是虚假的,我最初有一个更长的例子,但忘了删除它们。
答案1
一种可能的手动方法是使用moredelim=**[is][\bfseries]{@}{@},
我也可以建议一种风格吗?下面我\lstdefinelanguage
customRthree
结合包进行了定义courier
。您也可以尝试beramono
。例如,Latex 列表 R:需要带有粗体关键字和正确插入符号(^)的等宽字体。
\lstdefinelanguage{customRthree}{
keywords={t},
otherkeywords={<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries,
moredelim=**[is][\bfseries]{@}{@}, % every character inside @ @ will be in bold face
basicstyle=\ttfamily,
commentstyle=\textsl,
}
代码
\documentclass[preview,border=5,convert]{standalone}
\usepackage{courier}
\usepackage{listings}
\lstdefinelanguage{customR}{ % defined a new R entry
keywords={t},
otherkeywords={<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries,
moredelim=**[is][\bfseries]{@}{@},
}
\lstdefinelanguage{customRtwo}{
otherkeywords={<-,<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries,
moredelim=**[is][\bfseries]{@}{@},
}
\lstdefinelanguage{customRthree}{
keywords={t,R},
otherkeywords={<<-,\%*\%}, %% cannot add <-
keywordstyle=\bfseries,
moredelim=**[is][\bfseries]{@}{@},
basicstyle=\ttfamily,
commentstyle=\textsl,
}
\begin{document}
\lstset{language=R,caption={Standard R}}
\begin{lstlisting}[frame=tb]
S <- H %*% t(pprd) %*% t(H) + R
xest <<- xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\lstset{language=customR,caption={Custom R}}
\begin{lstlisting}[frame=tb]
S @<-@ H %*% t(pprd) %*% t(H) + R
xest @<<-@ xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\lstset{language=customRtwo,caption={Custom R (alt.)}}
\begin{lstlisting}[frame=tb]
S <- H %*% t(pprd) %*% t(H) + R
xest @<@<- xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\begin{lstlisting}[frame=tb,language=customRthree,caption={Custom R 3}]
S @<-@ H %*% t(pprd) %*% t(H) + R
xest @<<-@ xprd + kalmangain %*% (z - H %*% xprd)
}
\end{lstlisting}
\end{document}