如何扩展 lstinline 中的特殊字符?

如何扩展 lstinline 中的特殊字符?

我有一些内联代码,想使用一些特殊字符。

期望结果:

`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}

在此处输入图片描述

相关内容