让 soul 和 \texttt 一起工作

让 soul 和 \texttt 一起工作

我尝试\texttt使用包 soul 重新定义命令,使其具有背景颜色。但似乎比我想象的要难。

我的初始代码是

\documentclass{article}
\usepackage{xcolor, soul}
\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\let\oldtexttt\texttt
\renewcommand{\texttt}[1]{
    \hl{\oldtexttt{#1}}
}

\begin{document}

\texttt{can we highlight}

\end{document}

但是它不能运行,错误信息是:

\texttt 的参数有一个额外的}。

我搜索了一下,发现这个帖子。帖子建议使用\soulregister命令。所以我在前面添加了以下行\begin{document}

\soulregister{\texttt}{1}

但错误仍然存​​在。我还发现了这篇文章,它进一步建议使用\DeclareRobustCommand。现在我的代码是

\documentclass{article}
\usepackage{xcolor, soul}
\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\let\oldtexttt\texttt
% \renewcommand{\texttt}[1]{
%   \hl{\oldtexttt{#1}}
% }

\DeclareRobustCommand{\texttt}[1]{
    \hl{\oldtexttt{#1}}
}
\soulregister{\texttt}{1}

\begin{document}

\texttt{can we highlight}

\end{document}

但它不起作用。错误信息是

TeX 容量超出,抱歉 [grouping levels=255]

这看起来像是一堆问题。你能指出哪里出了问题吗?如何解决这个看似简单的问题?

编辑:

我正在使用 Pandoc 将 Markdown 文件转换为 PDF。Markdown 内联代码的底层 LaTeX 命令是\texttt。但是没有背景颜色。这就是为什么我想将 soul 和 结合起来\texttt

我尝试了@egreg 和@daleif 的解决方案。它们都适用于标准的单独 tex 代码。

\documentclass{article}
\usepackage{xcolor, soul}

\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\let\oldtexttt\texttt

% \renewcommand{\texttt}[1]{
% {\ttfamily\hl{#1}}
% }

\DeclareRobustCommand{\texttt}[1]{%
    \hl{\ttfamily#1}%
}

\begin{document}

\texttt{can we highlight}

\end{document}

但如果我把它放在一个文件中head.tex,然后把Markdown编译成PDF,还是会出错,内容head.tex是:

\usepackage{xcolor, soul}

\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\let\oldtexttt\texttt
\DeclareRobustCommand{\texttt}[1]{%
    \hl{\ttfamily#1}%
}

内容test.md

`some inline words`

如果我尝试使用新的标题生成 PDF:

pandoc -H head.tex -s test.md -o test.pdf

发生另一个错误:

包灵魂错误:重建失败。

答案1

soul非常特殊,它在宏级别上工作,无法处理内容中包含的“宏”。

我不会\texttt像那样超载,为其制作一个特殊的宏。

顺便说一句:这有效{\ttfamily\hl{#1}}

答案2

的工作\texttt本质上是吸收其论点并发出\ttfamily

\documentclass{article}
\usepackage{xcolor, soul}

\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\DeclareRobustCommand{\texttt}[1]{%
    \hl{\ttfamily#1}%
}

\begin{document}

\texttt{can we highlight}

\end{document}

enter image description here

另一方面,最好使用不同的命令:

\documentclass{article}
\usepackage{xcolor, soul}

\colorlet{mycolor}{red!30}
\sethlcolor{mycolor}

\DeclareRobustCommand{\hltt}[1]{%
    \hl{\ttfamily#1}%
}

\begin{document}

\hltt{can we highlight}

\end{document}

不要忘记保护行尾。

相关内容