我尝试\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}
另一方面,最好使用不同的命令:
\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}
不要忘记保护行尾。