我发现了一个非常具体的格式错误:当我在环境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}