listings
我正在尝试按照此处显示的建议在环境左侧添加注释:https://zuttobenkyou.wordpress.com/2010/12/05/latex-saner-source-code-listings-no-starch-press-style/\vbox{\llap{*\hskip 1em}}
使用转义序列内的 命令。
但是当我将命令放入宏中时,它会移动行,而如果我直接添加命令则不会移动。有人能解释为什么会这样吗?下面显示了一个 MWE。
对于背景,listings
如果将代码放在转义序列中,则允许您在逐字环境中恢复到任意 LaTeX 代码,在这种情况下,转义序列定义为以 开头(*@
并以 结尾@*)
。该llap
命令创建一个宽度为零的框;然后将参数放置在这个零宽度框的左侧(因此将与左侧的任何内容重叠)。我不确定该命令的要点vbox
是什么。
\documentclass{article}
\usepackage{listings}
\newcommand*{\lnote}{
\vbox{\llap{*\hskip 1em}}
}
\begin{document}
\begin{lstlisting}[escapeinside={(*@}{@*)}, frame=single]
(*@\vbox{\llap{*\hskip 1em}}@*)echo hello
(*@\lnote@*)echo goodbye
\end{lstlisting}
\end{document}
文档编译后如下所示。第一行按预期工作,第二行则产生了不希望的水平偏移。
答案1
您的 lnote 命令正在添加空格标记。我在这里将它们从定义中注释掉了。
\documentclass{article}
\usepackage{listings}
\newcommand*{\lnote}{%
\vbox{\llap{*\hskip 1em}}%
}
\begin{document}
\begin{lstlisting}[escapeinside={(*@}{@*)}, frame=single]
(*@\vbox{\llap{*\hskip 1em}}@*)echo hello
(*@\lnote@*)echo goodbye
\end{lstlisting}
\end{document}
为什么这里要用垂直盒子?这似乎是一个非常不符合乳胶的结构。