我想使用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}
结果: