缩进问题
上一篇文章,讲了一个难题,就是缩进问题。用verbatim进行代码显示,需要把代码中的tab手动改成空格,非常麻烦,怎么解决这个难题?使用Fancyvrb吧。
fancyvrb提供了一个新的环境Verbatim,注意,这与自带的verbatim有首字母大小写的区别。以下是用fancyvrb的效果:
\documentclass[a4paper,utf8]{article}
\usepackage{ctex}
\usepackage{fancyvrb}
\begin{document}
Python代码:
\begin{Verbatim}
def recursive(array, last, result):
if last == 0:
result.append(array[:])
return
for i in range(0, last + 1):
recursive(array, last - 1, result)
if last & 1 == 0:
array[0], array[last] = array[last], array[0]
else:
array[i], array[last] = array[last], array[i]
def permutations(array):
result = []
recursive(array, len(array) - 1, result)
return result
if __name__ == '__main__':
result = permutations(['A', 'B', 'C', 'D'])
for x in result:
print(x)
\end{Verbatim}
\end{document}
编译效果:
因为源代码里本来就有缩进,所以整体被缩进了很多。这是fancyvrb的真正原封不动的优点,也是缺点,有多少个tab,就展示多少个tab。那有解决方案吗?
忽略字符
为了源代码好看,我们必须要将内容缩进,但是fancyvrb原封不动显示缩进,这就不符合我们的预期了,怎么办呢?gobble属性可以解决这个问题。gobble是忽略每行前面多少个字符。tabsize决定了每个tab换成多少个空格,如下例:
\documentclass[a4paper,utf8]{article}
\usepackage{ctex}
\usepackage{fancyvrb}
\begin{document}
Python代码:
\begin{Verbatim}[gobble=1,tabsize=4]
def recursive(array, last, result):
if last == 0:
result.append(array[:])
return
for i in range(0, last + 1):
recursive(array, last - 1, result)
if last & 1 == 0:
array[0], array[last] = array[last], array[0]
else:
array[i], array[last] = array[last], array[i]
def permutations(array):
result = []
recursive(array, len(array) - 1, result)
return result
if __name__ == '__main__':
result = permutations(['A', 'B', 'C', 'D'])
for x in result:
print(x)
\end{Verbatim}
\end{document}
配好这两个后,就美观多了:
显示行号
对于代码的显示来说,行号显示尤其重要,那么fancyvrb能否做到呢?肯定是可以的,而且很简单。下面是例子:
\documentclass[a4paper,utf8]{article}
\usepackage{ctex}
\usepackage{fancyvrb}
\begin{document}
Python代码:
\begin{Verbatim}[gobble=1,tabsize=4,numbers=left]
def recursive(array, last, result):
if last == 0:
result.append(array[:])
return
for i in range(0, last + 1):
recursive(array, last - 1, result)
if last & 1 == 0:
array[0], array[last] = array[last], array[0]
else:
array[i], array[last] = array[last], array[i]
def permutations(array):
result = []
recursive(array, len(array) - 1, result)
return result
if __name__ == '__main__':
result = permutations(['A', 'B', 'C', 'D'])
for x in result:
print(x)
\end{Verbatim}
\end{document}
编译效果: