为什么 amsmath \xleftarrow 及其朋友在列表中不起作用?

为什么 amsmath \xleftarrow 及其朋友在列表中不起作用?

我想使用literate=来替代\xleftarrow(及其自定义变体)某些列表元素。请参阅示例。

\begin{filecontents*}{\jobname.rule}
A <*>  B
A <== B
\end{filecontents*}

\documentclass{article}

\usepackage{listings}

\usepackage{amsmath}

\makeatletter
\newcommand{\xLeftrightarrow}[2][]{\ext@arrow 0359\Leftrightarrowfill@{#1}{#2}}
\makeatother


\begin{document}

\lstinputlisting[
    label=lst:rules,
    caption={Rules},
    literate={<*>}{$\xLeftrightarrow{*}{}$}3{<==}{$\xleftarrow{x}{}$}3
]{\jobname.rule}

$\xLeftrightarrow{*}{}$
$\xleftarrow{x}{}$

\end{document}

列表中原本应该在箭头上方流动的文本变成了附加文本。这个问题可以修复吗?与列表兼容的替代方案?

答案1

来自清单手册,第 50 页:

每个“印刷单元”<替换文本>必须除非是单个字符,否则请使用括号。

因此在这种情况下您需要在andliterate={<*>}{{$\xLeftrightarrow{*}{}$}}3{<==}{{$\xleftarrow{x}{}$}}3周围添加额外的括号。$\xLeftrightarrow{*}{}$\xLeftrightarrow{x}{}$

梅威瑟:

\begin{filecontents*}{\jobname.rule}
A <*>  B
A <== B
\end{filecontents*}

\documentclass{article}

\usepackage{listings}

\usepackage{amsmath}

\makeatletter
\newcommand{\xLeftrightarrow}[2][]{\ext@arrow 0359\Leftrightarrowfill@{#1}{#2}}
\makeatother


\begin{document}

\lstinputlisting[
    label=lst:rules,
    caption={Rules},
    literate={<*>}{{$\xLeftrightarrow{*}{}$}}3{<==}{{$\xleftarrow{x}{}$}}3
]{\jobname.rule}

$\xLeftrightarrow{*}{}$
$\xleftarrow{x}{}$

\end{document}

结果:

在此处输入图片描述

相关内容