listings
我在表格命令中使用了带有逐字代码的包\caption
。当我远离 TeX 命令序列(texcsstyle
在 中listings
)时,一切都很好,例如当我仅使用标识符时emphstyle
。
当我使用texcsstyle
像 这样的 TeX 命令序列时\lstinline|\newcommand|
,我首先必须转义 ,因为我在 的参数中\
使用,所以我使用。 (在下面的 MWE 中,我将麻烦的文本包含在命令中,以确认 正确转义后,使用 (蓝色)格式化。)\lstinline
\caption
\caption{\lstinline|\\newcommand|}
\section
\newcommand
texcsstyle
但我仍然没有得到满意的结果。具体发生什么取决于我是否加载了包caption
。
- 如果不加载该
caption
包,表格列表中将不显示任何标题。(“1”代表表 1是显示,但该行的标题本身只有空文本。) - 如果我加载该
caption
包,则会显示一个标题。但是,(a)\newcommand
的格式为basicstyle
(红色) 而不是texcsstyle
(蓝色),并且 (b)newcommand
的显示没有前缀\
。
我知道以下解决方法:为表格列表指定可选文本:\caption[optional text]{original text}
并手动格式化可选文本。
我在问(a)当我使用标识符时,我能否挽救自动正确的行为(使用emph
标识符获得的行为)texcs
?
此外,出于好奇,
(b)为什么加载该caption
包可以部分挽救表格列表中空白标题行的彻底失败?
(c)为什么我对 LaTeX 风格有问题,texcsstyle
而对其他风格(非 LaTeX 特有)没有问题?
这是我的 MWE:
\documentclass{article}
\usepackage{listings,xcolor}
\usepackage{caption}
\lstset{language=[LaTeX]TeX,%
basicstyle=\color{red}\ttfamily,%
emphstyle=\color{green},%
texcsstyle=*\color{blue},%
moreemph={mykey}%
}
\begin{document}
\listoftables
\bigskip
\section{Caption 1 text outside of caption: Emph: \lstinline|mykey|; texcs: \lstinline|\\newcommand|}
\noindent
Caption 1 text outside of caption: Emph: \lstinline|mykey|; texcs: \lstinline|\newcommand|\\
Caption 2 text outside of caption: Only Emph: \lstinline|mykey|
\begin{table}[h]
\caption{1 Emph: \lstinline|mykey|; texcs: \lstinline|\\newcommand|}
\begin{tabular}{|c|c|}
\hline
x & y\\
\hline
\end{tabular}
\end{table}
\begin{table}[h]
\caption{2 Only Emph: \lstinline|mykey|}
\begin{tabular}{|c|c|}
\hline
x & y\\
\hline
\end{tabular}
\end{table}
\end{document}
答案1
如果你查看文件,.lot
你就会发现问题
\contentsline {table}{\numberline {1}{\ignorespaces 1 Emph: \lstinline |mykey|; texcs: \lstinline | newcommand|\relax }}{1}
\contentsline {table}{\numberline {2}{\ignorespaces 2 Only Emph: \lstinline |mykey|\relax }}{1}
一些命令已被安全地阻止它们扩展,但最终的结果是它被损坏,特别是\\
之前的\newcommand
(\listinlines
特殊定义没有生效,因为它被阻止扩展,所以它被写入\lstinline
文件lot
。
最简单的方法可能是隐藏自定义强命令中的列表
\documentclass{article}
\usepackage{listings,xcolor}
\usepackage{caption}
\lstset{language=[LaTeX]TeX,%
basicstyle=\color{red}\ttfamily,%
emphstyle=\color{green},%
texcsstyle=*\color{blue},%
moreemph={mykey}%
}
\begin{document}
\DeclareRobustCommand\lstA{\lstinline|\\newcommand|}
\DeclareRobustCommand\lstB{\lstinline|mykey|}
\listoftables
\bigskip
\section{Caption 1 text outside of caption: Emph: \lstinline|mykey|; texcs: \lstinline|\\newcommand|}
\noindent
Caption 1 text outside of caption: Emph: \lstinline|mykey|; texcs: \lstinline|\newcommand|\\
Caption 2 text outside of caption: Only Emph: \lstinline|mykey|
\begin{table}[h]
\caption{1 Emph: \lstB; texcs: \lstA}
\begin{tabular}{|c|c|}
\hline
x & y\\
\hline
\end{tabular}
\end{table}
\begin{table}[h]
\caption{2 Only Emph: \lstB}
\begin{tabular}{|c|c|}
\hline
x & y\\
\hline
\end{tabular}
\end{table}
\end{document}