【LaTex】6.2 Fancyvrb包

缩进问题

  上一篇文章,讲了一个难题,就是缩进问题。用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}

  编译效果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值