7

我在代码块中有一个线性模型,我想在 LaTeX 中很好地显示它。模型调用采用带有波浪号的标准形式 ~ 在 LaTeX 中排版非常糟糕。

\documentclass{article}
\begin{document}
<<>>=
lm(Sepal.Width ~ Sepal.Length, data = iris)
@
\end{document}

代码被编织knitr::knit(mwe.Rnw),然后通过 PDFLaTeX 运行。

在 LaTeX 中制作漂亮的波浪线非常烦人,让 knitr 制作它们看起来并不容易,更容易。对 .tex 文件的检查knit表明代码被放入了三个环境中,其中\begin{alltt} ... \end{alltt}一个是有趣的。但是该软件包alltt没有为特殊字符的特殊排版提供任何快速修复。

4

1 回答 1

8

这个解决方案的灵感来自yihui 关于 hooks 的示例这篇文章和我的好友 RJ。

\documentclass{article}
\usepackage{xspace}
\newcommand{\mytilde}{\lower.80ex\hbox{\char`\~}\xspace}
\begin{document}
<<setup, include=FALSE>>=
library(knitr)
hook_source = knit_hooks$get('source')
knit_hooks$set(source = function(x, options) {
  txt = hook_source(x, options)
  # extend the default source hook
  gsub('~', '\\\\mytilde', txt)
})
@
<<results = "hide">>=
lm(Sepal.Width ~ Sepal.Length, data = iris)
@
\end{document}

它还定义了\mytilde一般使用的命令。例如,R 代码的内嵌示例:“ in the form \texttt{response~\mytilde~predictors} ...”。

该软件包xspace不是严格必需的(只要您xspace在 newcommand 中删除),但会使该命令更好用。

于 2013-02-05T15:00:42.893 回答