如何在Word中排出漂亮的代码

本文介绍了如何使用Notepad++和Word进行代码排版,包括利用Notepad++的NppExport插件将高亮代码复制到Word,设置行号、背景色,以及通过VBA宏自动化排版过程。
摘要由CSDN通过智能技术生成

引言

       学数学和计算机,当然还是用LaTeX排版技术文章更方便。但有时候还是迫不得已需要用Word写作,另外Word其实也有Word的好处,比如细节上的修改要比LaTeX方便。

       从Matlab高亮代码复制到Word,中文会乱码开始,我就很想研究下如何在Word中展示漂亮的代码。今年寒假利用Vim,有些突破,10月3日的时候又有了比较大的进展,自己设计了一款Vim的代码高亮配色方案,然后利用Vim的:TOhtml命令生成html文件,再用浏览器打开html文件,复制里面的代码到Word,就能保留原始的高亮效果了。

       其实本质就是制作一份html文件,复制到Word时会保留其源格式。很多代码编辑器或者IDE都有提供制作html文件的功能,比如CodeBlocks(File -> Export -> As HTML...)。后来我发现Notepad++才是最方便的工具。然后结合看Oeasy的Word教学视频,对底纹等排版知识有了更深的了解,加上一点VBA的功底,目前能比较高效的进行Word的代码排版工作了。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1  工欲善其事,必先利其器

       我用的是微软OFFICE2013版的Word。2007、2010的操作也差不多。用其它Word版本或WPS的读者自己看着办。

       辅助工具只有一个:Notepad++

 

2  基本操作

  1. 用Notepad++直接编辑代码文件,注意文件后缀,比如.cpp是C++程序,.m是Matlab,写对后缀表示的文件类型,才有对应的语法高亮效果。
  2. 选中需要的代码块(或者不选,默认对全文操作),使用“插件 -> NppExport”,具体见下图
  3. 然后直接粘贴到Word就行了。

       读者可能要吐槽了:哈?这么简单?那尼玛的说那么多废话干嘛?

       基本操作确实这么简单,不过希望读者能明白其中的道理,“Copy HTML to clipboard”是把当前文本以html格式复制到剪切板,所以再把剪切板的内容复制到Word,就不同于以往的纯文本复制,而是相当于在网页上把一段带有格式的文本复制到Word。这也正是我所说

OpenMV和STM32之间的通信可以通过串口进行。下面是一个简单的示例代码,展示了如何在OpenMV和STM32之间进行串口通信: 在OpenMV端的代码: ```python import sensor, image, time, pyb # 初始化摄像头 sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) # 初始化串口 uart = pyb.UART(3, 115200) while(True): # 拍摄图像 img = sensor.snapshot() # 将图像转换为灰度图像 img_gray = img.to_grayscale() # 将图像转换为二进制数据 img_bytes = img_gray.compress() # 发送图像数据到STM32 uart.write(img_bytes) # 接收STM32发送的数据 data = uart.read(10) # 读取10个字节的数据 # 处理接收到的数据 if data: # 在串口终端打印接收到的数据 print(data) ``` 在STM32端的代码: ```c #include "stm32f4xx.h" #include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; void SystemClock_Config(void);static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); uint8_t rx_data[10]; while (1) { // 接收OpenMV发送的数据 HAL_UART_Receive(&huart2, rx_data, 10, HAL_MAX_DELAY); // 处理接收到的数据 // ... // 发送数据到OpenMV HAL_UART_Transmit(&huart2, rx_data, 10, HAL_MAX_DELAY); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 16; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 7; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } if (HAL_PWREx_EnableOverDrive() != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } static void MX_USART2_UART_Init(void) { huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart2) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 请注意,以上代码只是一个简单的示例,实际应用可能需要根据具体需求进行修改和优化。另外,还需要确保OpenMV和STM32的串口参数(如波特率、数据位、停止位等)一致。
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值