![如何扩展 lstinline 中的特殊字符?](https://linux22.com/image/444857/%E5%A6%82%E4%BD%95%E6%89%A9%E5%B1%95%20lstinline%20%E4%B8%AD%E7%9A%84%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我有一些内联代码,想使用一些特殊字符。
期望结果:
`CMD ...`
工作 Tex 无lstinline
:
\textasciigrave CMD \ldots\textasciigrave
但是,当我尝试将 Tex 放入 中时\lstinline{}
,特殊字符不再正确扩展,而是给出原始的 Tex 代码。当我仅使用 时,反引号看起来不正确,`
并且 LaTeX 检查器会抱怨我应该使用\ldots
而不是...
。
有没有办法让特殊字符按照我的需要扩展lstinline
?
答案1
\lstinline
是包的一部分listings
,用于“逐字”打印其内容,也就是说,它跳入循环以避免解释任何命令(有例外和选项,但主要是这是命令的主要目的)以便能够排版代码。
如果您需要的是等宽字体,只需使用:
\texttt{\textasciigrave CMD \ldots\textasciigrave}
它以当前等宽字体打印(已评估的!)内容。
答案2
问题 1:
如今,LaTeX“假定”.tex 输入文件以 utf8 编码,因此使用传统的单八位字节/单字节/8 位 TeX 引擎默认使用选项“utf8”加载 inputenc 包。
但是 listings-package 可以追溯到单八位字节/单字节/8 位编码是编码 .tex 源代码等文本文件的最先进技术的时代。
当运行基于 TeX 或 pdfTeX 的传统非 utf-8 引擎时,listings-package 不支持 utf8 等多八位字节编码,而仅支持单八位字节/8 位编码——listings 包手册的“2.5 特殊字符”部分说:
因此,如果你使用支持多字节字符的包,例如针对中文和 UTF-8 字符的 CJK 或 ucs 包,您必须避免让列表处理扩展字符。通常最好也指定
extendedchars=false
以避免列表与其他包的扩展字符处理纠缠在一起。
如果您坚持使用 listings-package 和 utf8 编码的 .tex 输入文件执行操作,运行传统的非 utf-8 TeX 引擎,那么请确保 listings-package 中的例程只处理在 utf8 中分配给 7 位(单八位字节)代码点的字符,这些代码点表示 ASCII 子集。
或者考虑使用listingsutf8-package 并且仅命令\lstinputlisting
。
问题 2:
-command\lstinline
不支持章节中描述的退出 LaTeX 的键listings 包手册中的“4.3.13 转为 LaTeX”。我知道有一个例外:mathescape
。因此,如果您不介意这个缺点,您可以在数学转义中使用 -command \text
。
如果使用 utf8 编码的 .tex 输入文件,则
- 要么使用基于 XeTeX 或 LuaTeX 的 TeX 引擎,其“本机”内部字符表示方案是 unicode,因此在任何情况下都会将多字节 utf8 字符标记为单个字符标记。
- 或者,如果使用基于 TeX 或 pdfTeX 的传统 TeX 引擎(其中 utf8 字符的每个八位字节/字节将被标记为单独的字符标记,并且在可能的情况下,表示多字节字符的多个字节序列的前导八位字节/字节被激活,并且——为了触发正确字形的插入——被定义为“查看”来自标记连续八位字节/字节的后续字符标记),请确保 listings-package 例程的所有参数仅处理在 utf8 中分配给表示 ASCII 子集的 7 位(单八位字节)代码点的字符。
\documentclass{article}
%%\usepackage[latin1]{inputenc}
%%\usepackage[OT1]{fontenc}
\usepackage{listings}
\usepackage{amsmath}
%
% Either have the .tex-input-file encoded in a single-byte-encoding and use inputenc.
% Or use a native-utf8-engine like LuaTeX or XeTeX.
% Or make sure the routines of the listings-package don't encounter multi-octet-characters.
%
\lstset{%
language={[LaTeX]TeX},
basicstyle=\fontfamily{pcr}\selectfont,
commentstyle=\bfseries,
}
\begin{document}
Test Text \textasciigrave CMD \ldots\textasciigrave\space Test Text
Test Text
%
% Either have the .tex-input-file encoded in a single-byte-encoding and use inputenc.
% Or use a native-utf8-engine like LuaTeX or XeTeX.
% Or make sure the routines of the listings-package don't encounter multi-octet-characters.
%
\lstinline[mathescape]|Listing $\text{\normalfont\textasciigrave CMD \ldots\textasciigrave}$ Listing|
Text Text
Test Text
%
% Either have the .tex-input-file encoded in a single-byte-encoding and use inputenc.
% Or use a native-utf8-engine like LuaTeX or XeTeX.
% Or make sure the routines of the listings-package don't encounter multi-octet-characters.
%
\lstinline[mathescape]|Listing $\text{\textasciigrave CMD \ldots\textasciigrave}$ Listing|
Text Text
\end{document}