问题是,在内联列表“ABC-ABC”中,连字符消失了。如果我删除 literate=... 参数,它就可以正常工作,但我需要它,因为我想通过使用“-”指定手动连字符标记来环绕较长的内联代码。我该如何解决这个问题?
另一个奇怪的事情是,内联列表仅适用于 \newcommand,如示例中的第二部分所示。这是一个错误吗?
\documentclass{article}
\usepackage{listings}
\lstdefinestyle{Inline}
{
literate={\-}{}{0\discretionary{-}{}{}}
}
\newcommand{\code}[1]{\lstinline[style=Inline]{#1}}
\begin{document}
\code{ABC-ABC}\\
\code{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC\-ABC}\\[1cm]
Bug in listings???\\
\code{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC\-ABC}\\
\lstinline[style=Inline]{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC\-ABC}
\end{document}
答案1
有两个问题:
\-
-
与 中相同literate
,如果要在连字符前加反斜杠,则需要用反斜杠对反斜杠进行转义。连字符不需要用反斜杠进行转义:\\-
捕获反斜杠和连字符。来自文档:
4.1 如何阅读参考资料
...
5. 如果要输入特殊字符之一,则必须 使用反斜杠转义{}#%\
该字符。这意味着您必须为 单个字符“右括号”编写代码,但当然不能为结束参数 字符编写代码。\}
包
listings
读取已更改 catcode 的代码。如果代码\lstinline
已作为参数读取,则参数将被标记化,catcode 更改不会产生影响,请参阅 Werner 的评论:\newcommand*{\code}{\lstinline[style=Inline]}
例子:
\documentclass{article}
\usepackage[a5paper]{geometry}
\usepackage{listings}
\lstdefinestyle{Inline}
{
literate={\\-}{}{0\discretionary{-}{}{}}
}
\newcommand{\code}{\lstinline[style=Inline]}
\begin{document}
\noindent
\code{ABC-ABC}\\
\code{AAAAAAAAAAAAAAAAAAAAAAAAAABC\-ABC}\\
\code{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABC\-ABC}
\end{document}