在对齐环境中列出不起作用

在对齐环境中列出不起作用

我发现了一个非常具体的格式错误:当我在环境lstinline[mathescape]中使用时align,一些基本的数学格式(如下标)会停止工作。但它在equation环境中却能正常工作。奇怪的是,当我不加载包时syntax,这个错误不会发生。

A完整的最小示例重现了该问题:

\documentclass{article}

\usepackage{amsmath}
\usepackage{listings}
\usepackage{syntax}

\begin{document}

\begin{align*}
e_1 \mapsto \lstinline[mathescape]|Stream.of($e_1$)|
\end{align*}

\begin{equation*}
e_1 \mapsto \lstinline[mathescape]|Stream.of($e_1$)|
\end{equation*}

\end{document}

如您所见,对齐环境内的订阅不起作用。

错误插图

有没有办法彻底解决此错误?是什么原因造成的?


编辑根据@UlrikFisher的评论,我可以找到一种专门针对下划线的解决方法。不幸的是,这种解决方法不适用于其他宏。这是一个更完整的示例:

\documentclass{article}

\usepackage{amsmath}
\usepackage{listings}
\usepackage[nounderscore]{syntax}
\usepackage[shorthand]{semantic}

\begin{document}

\begin{align*}
e_1 \mapsto \lstinline[mathescape]+Stream.of($|[e_1|]$)+
\end{align*}

\begin{equation*}
e_1 \mapsto \lstinline[mathescape]+Stream.of($|[e_1|]$)+
\end{equation*}

\end{document}

完整的错误

答案1

AMS 比对的主体本质上是内部命令的参数(因此主体可以作为比对测量的一部分使用两次)这意味着没有动词类命令起作用。

有时您很幸运,lstinline 的参数不需要任何特殊的 catcode 更改,因此命令似乎可以工作,但基本上它无法在这种设置下工作。

加载syntax包显然是全局重新定义的,_其 catcode 为 13 定义,并且列表无法在内部恢复align

您可以在开始对齐之前在框中设置文本

\documentclass{article}

\usepackage{amsmath}
\usepackage{listings}
\usepackage{syntax}

\newbox\mybox
\begin{document}


\setbox\mybox\hbox{{\lstinline[mathescape]|Stream.of($e_1$)|}}
\begin{align*}
e_1 \mapsto \usebox{\mybox}
\end{align*}

\begin{equation*}
e_1 \mapsto \lstinline[mathescape]|Stream.of($e_1$)|
\end{equation*}

\end{document}

相关内容