我正在使用列表来处理包含 TeX 文件中的代码示例以及从外部文件输入的代码示例的文档。我希望后者上方和下方有水平线,但前者不行,但使用我当前的设置,两者都有水平线。我的序言有
\lstset{
basicstyle=\footnotesize\ttfamily,
escapechar=¢,
language=python,
frame=lines
}
我知道我可以覆盖框架,lstlisting
但\begin{lstlisting}[frame=none]
有没有办法可以自动完成而不必这样做?
我有大量清单,因此如果可能的话,我宁愿更改序言,而不是更改主要文档文本。
下面是目前其工作原理的一个例子:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{code.py}
for j in range(100):
print(j)
print(j**3)
\end{filecontents*}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
escapechar=¢,
language=python,
frame=lines
}
\begin{document}
An inline code example:
\begin{lstlisting}
for i in range(10):
print(i**2)
\end{lstlisting}
Some code inputted from elsewhere:
\lstinputlisting[caption=code example]{code.py}
\end{document}
正如您所看到的,我在两个代码清单周围都得到了几行,但我不希望它们出现在第一个代码清单周围。
答案1
重新定义\lstinputlisting
为始终使用frame=lines
:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{code.py}
for j in range(100):
print(j)
print(j**3)
\end{filecontents*}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
escapechar=¢,
language=python
}
\let\oldlstinputlisting\lstinputlisting
% \lstinputlisting always have frame=lines
\renewcommand{\lstinputlisting}[2][]{\oldlstinputlisting[frame=lines,#1]{#2}}
\begin{document}
An inline code example:
\begin{lstlisting}
for i in range(10):
print(i**2)
\end{lstlisting}
Some code inputted from elsewhere:
\lstinputlisting[caption=code example]{code.py}
\end{document}
答案2
可以\lstnewenvironment
用来定义替代选项,但是您需要使用新环境而不是一个lstlisting
。
\documentclass{article}
\begin{filecontents*}{code.py}
for i in range(10):
print(i**2)
\end{filecontents*}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
escapechar=¢,
language=python,
frame=lines
}
\lstnewenvironment{unlined}
{\lstset{frame=none}}
{} % http://mirrors.ctan.org/macros/latex/contrib/listings/listings.pdf , section 4.16
\begin{document}
An inline code example:
\begin{unlined}
for i in range(10):
print(i**2)
\end{unlined}
Some code inputted from elsewhere:
\lstinputlisting[caption=code example]{code.py}
\end{document}