我的电脑上有某种模板/bash 脚本示例(硬盘上的 .sh 文件),我在其中放置了命令和注释输出。这是我的 example.sh 文件:
echo this is wide spaced
#this is wide spaced
echo this is $'\n' wide spaced
#this is <-notice the whitespace here before the newline
# wide spaced
(我添加了“<-注意换行符之前的空格”,但脚本中没有)。有时我会在 latex 中编译它们以添加更多信息,并使用 lstinputlisting 导入它们。我已定义:
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstdefinestyle{customBashStyle}{
keepspaces=true,
language=Bash,
showspaces=true,
}
\lstinputlisting[style=customBashStyle]{./example.sh}
\end{document}
问题是它保留了所有空格,使它们可见,除了换行符之前的空格。我怎样才能使该空格也存在且可见?
答案1
这与 TeX 读取文件的低级过程有关,这个过程分为几个步骤;与当前问题最相关的是,引用 TeXbook 第 46 页,
TeX 删除输入行最右端的所有 ⟨space⟩ 字符(数字 32)。
listings
大多数 TeX 实现也会删除制表符(编号 9)。这甚至在标记化过程开始将字符转换为标记之前就已发生,因此当某一行完成其工作时,尾随空格就一去不复返了。
对于需要显示尾随空格的特殊情况,这种情况很少见,因为 shell 脚本的工作方式与 TeX 相同并且会忽略尾随空格,您可以使用以下escapechar
功能:
\documentclass{article}
\usepackage{listings}
\begin{document}
\lstdefinestyle{customBashStyle}{
basicstyle=\ttfamily,
columns=fullflexible,
keepspaces=true,
language=Bash,
showspaces=true,
}
%\lstinputlisting[style=customBashStyle]{./example.sh}
\begin{lstlisting}[style=customBashStyle,escapechar=\%]
echo this is wide spaced
#this is wide spaced
echo this is $'\n' wide spaced
#this is %%
# wide spaced
\end{lstlisting}
\end{document}
恐怕没有其他方法可以打印尾随空格。您可以使用任何未出现在要打印的代码中的转义字符作为转义字符。