简 介: 本文给出了直接将CSDN文章一键生成对应的思维导图目录的程序。将目录增加在博文的最开始,可以更好地显示博文的内部结构,作为原来CSDN网页中目录的补充,丰富博文的表达能力。

关键词CSDN思维导图目录

#mermaid-svg-0ryGGT3S552Mp3t6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .error-icon{fill:#552222;}#mermaid-svg-0ryGGT3S552Mp3t6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0ryGGT3S552Mp3t6 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-0ryGGT3S552Mp3t6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0ryGGT3S552Mp3t6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0ryGGT3S552Mp3t6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0ryGGT3S552Mp3t6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0ryGGT3S552Mp3t6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0ryGGT3S552Mp3t6 .marker.cross{stroke:#333333;}#mermaid-svg-0ryGGT3S552Mp3t6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0ryGGT3S552Mp3t6 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .cluster-label text{fill:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .cluster-label span{color:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .label text,#mermaid-svg-0ryGGT3S552Mp3t6 span{fill:#333;color:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .node rect,#mermaid-svg-0ryGGT3S552Mp3t6 .node circle,#mermaid-svg-0ryGGT3S552Mp3t6 .node ellipse,#mermaid-svg-0ryGGT3S552Mp3t6 .node polygon,#mermaid-svg-0ryGGT3S552Mp3t6 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0ryGGT3S552Mp3t6 .node .label{text-align:center;}#mermaid-svg-0ryGGT3S552Mp3t6 .node.clickable{cursor:pointer;}#mermaid-svg-0ryGGT3S552Mp3t6 .arrowheadPath{fill:#333333;}#mermaid-svg-0ryGGT3S552Mp3t6 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0ryGGT3S552Mp3t6 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0ryGGT3S552Mp3t6 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-0ryGGT3S552Mp3t6 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-0ryGGT3S552Mp3t6 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0ryGGT3S552Mp3t6 .cluster text{fill:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 .cluster span{color:#333;}#mermaid-svg-0ryGGT3S552Mp3t6 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0ryGGT3S552Mp3t6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

思维导图目录
目 录
Contents
MARKDOWN目录
目录命令
优缺点
思维导图
几个示例
优缺点
一键生成程序
程序代码
博文总结

§01 思维导图目录


一、MARKDOWN目录

  在CSDN中,如果使用MarkDown编辑器,可以直接利器其中目录命令生成文章的目录。

1、目录命令

  加入本文一开始具有如下目录:

@[TOC](这里写目录标题)
# 一级目录
## 二级目录
### 三级目录

  对应的目录结构如下图所示:

▲ 图1.1.1 Markdown文中的目录

2、优缺点

  • 优点: 上述目录在结构上符合通常文章的目录结构,并且允许直接跳转。

  但是使用起来还有如下问题:

  • 在CSDN网页中已经具有文章的目录子窗口,如果在文章开始再添加上述目录结构实际上有点重复了;
  • 如果文章中目录层级比较多,实际上生成的上述目录树的结构很大,对于读者跳跃这部分还是不太方便;

  如何改进呢?

二、思维导图

  作为Markdown文档传统的目录,如果利用其内置的MERMARD流程图可以生成思维导图的目录结构。

1、几个示例

  比如下面就是博文 大红包高阻值电阻 对应的目录结构。

#mermaid-svg-Bxu2fNnUZCEAtbqn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .error-icon{fill:#552222;}#mermaid-svg-Bxu2fNnUZCEAtbqn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Bxu2fNnUZCEAtbqn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .marker.cross{stroke:#333333;}#mermaid-svg-Bxu2fNnUZCEAtbqn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .cluster-label text{fill:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .cluster-label span{color:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .label text,#mermaid-svg-Bxu2fNnUZCEAtbqn span{fill:#333;color:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .node rect,#mermaid-svg-Bxu2fNnUZCEAtbqn .node circle,#mermaid-svg-Bxu2fNnUZCEAtbqn .node ellipse,#mermaid-svg-Bxu2fNnUZCEAtbqn .node polygon,#mermaid-svg-Bxu2fNnUZCEAtbqn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .node .label{text-align:center;}#mermaid-svg-Bxu2fNnUZCEAtbqn .node.clickable{cursor:pointer;}#mermaid-svg-Bxu2fNnUZCEAtbqn .arrowheadPath{fill:#333333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Bxu2fNnUZCEAtbqn .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Bxu2fNnUZCEAtbqn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Bxu2fNnUZCEAtbqn .cluster text{fill:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn .cluster span{color:#333;}#mermaid-svg-Bxu2fNnUZCEAtbqn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Bxu2fNnUZCEAtbqn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

01.高阻值电阻
文章目录
测试阻值
测试电阻串联
02.测量电阻电压
示波器测量电阻电压
03.测试总结

  下图是 基于MM32F3273的MicroPython实验电路板 - 工作并不是正常 对应的目录。

#mermaid-svg-BPDG7WHO7lS40SYs {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .error-icon{fill:#552222;}#mermaid-svg-BPDG7WHO7lS40SYs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BPDG7WHO7lS40SYs .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-BPDG7WHO7lS40SYs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BPDG7WHO7lS40SYs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BPDG7WHO7lS40SYs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BPDG7WHO7lS40SYs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BPDG7WHO7lS40SYs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BPDG7WHO7lS40SYs .marker.cross{stroke:#333333;}#mermaid-svg-BPDG7WHO7lS40SYs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BPDG7WHO7lS40SYs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .cluster-label text{fill:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .cluster-label span{color:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .label text,#mermaid-svg-BPDG7WHO7lS40SYs span{fill:#333;color:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .node rect,#mermaid-svg-BPDG7WHO7lS40SYs .node circle,#mermaid-svg-BPDG7WHO7lS40SYs .node ellipse,#mermaid-svg-BPDG7WHO7lS40SYs .node polygon,#mermaid-svg-BPDG7WHO7lS40SYs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BPDG7WHO7lS40SYs .node .label{text-align:center;}#mermaid-svg-BPDG7WHO7lS40SYs .node.clickable{cursor:pointer;}#mermaid-svg-BPDG7WHO7lS40SYs .arrowheadPath{fill:#333333;}#mermaid-svg-BPDG7WHO7lS40SYs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BPDG7WHO7lS40SYs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BPDG7WHO7lS40SYs .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-BPDG7WHO7lS40SYs .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-BPDG7WHO7lS40SYs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BPDG7WHO7lS40SYs .cluster text{fill:#333;}#mermaid-svg-BPDG7WHO7lS40SYs .cluster span{color:#333;}#mermaid-svg-BPDG7WHO7lS40SYs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BPDG7WHO7lS40SYs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

文章目录
MM32F3273
实验电路板设计
电路原理图
PCB版图
焊接与调试
电路板焊接
上电测试

如下是 利用TLD2131组成LED矩阵显示实验电路板 三级思维导图目录形式。

#mermaid-svg-ukD3EfZulPI7Yvrp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .error-icon{fill:#552222;}#mermaid-svg-ukD3EfZulPI7Yvrp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ukD3EfZulPI7Yvrp .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ukD3EfZulPI7Yvrp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ukD3EfZulPI7Yvrp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ukD3EfZulPI7Yvrp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ukD3EfZulPI7Yvrp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ukD3EfZulPI7Yvrp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ukD3EfZulPI7Yvrp .marker.cross{stroke:#333333;}#mermaid-svg-ukD3EfZulPI7Yvrp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ukD3EfZulPI7Yvrp .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .cluster-label text{fill:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .cluster-label span{color:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .label text,#mermaid-svg-ukD3EfZulPI7Yvrp span{fill:#333;color:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .node rect,#mermaid-svg-ukD3EfZulPI7Yvrp .node circle,#mermaid-svg-ukD3EfZulPI7Yvrp .node ellipse,#mermaid-svg-ukD3EfZulPI7Yvrp .node polygon,#mermaid-svg-ukD3EfZulPI7Yvrp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ukD3EfZulPI7Yvrp .node .label{text-align:center;}#mermaid-svg-ukD3EfZulPI7Yvrp .node.clickable{cursor:pointer;}#mermaid-svg-ukD3EfZulPI7Yvrp .arrowheadPath{fill:#333333;}#mermaid-svg-ukD3EfZulPI7Yvrp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ukD3EfZulPI7Yvrp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ukD3EfZulPI7Yvrp .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ukD3EfZulPI7Yvrp .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ukD3EfZulPI7Yvrp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ukD3EfZulPI7Yvrp .cluster text{fill:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp .cluster span{color:#333;}#mermaid-svg-ukD3EfZulPI7Yvrp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ukD3EfZulPI7Yvrp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

TLD2131
文章目录
LED矩阵
基于TLD2331的LED矩阵
电路测试
电路设计
电路原理图
快速制版实验PCB
焊接PCB
搭建电路
在面包板上搭建电路
连接关系
测试LED矩阵
整体闪烁
流水灯测试
测试LED柱
测试总结
LED灯柱

2、优缺点

  利用上述思维导图作为CSDN文章的目录,是原来CSDN网页中目录的一个补充,从结构上可以形成文章更加整体的目录结构。

  特别是,可以通过参数来选择显示文章的子目录的层次,对于大型文章,可以节省目录所占的篇幅。

  但是,这种方式还有一定的缺点,现在还无法直接完成页内的跳转。这一点如果CSDN的网页功能如果能够改进就非常好了。在原来的MERMAID流程图中是允许增加跳转的功能的。

§02 一键生成程序


一、程序代码

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# CDM.PY                     -- by Dr. ZhuoQing 2021-11-09
#
# Usage: cdm *                      # Process clipboard
#        cdm **                     # Process clipboard and copy clipboard
#        cdm ++                     # Process clipboard and copy clipboard, equal
#        cdm |                      # Left and right, maxnum=2
#        cdm /                      # Left and right, maxnum=3
#        cdm :maxnum                # Left and right equal
#        cdm ::                     # == cdm :3
#        cdm ;                      # Left and right equal,zl 在第一层目录中增加序号
#        cdm -,=,                   # 等效| /:只是在第一层目录中增加序号。
#
# Note:
#============================================================
from head import *
csdn_title = '写文章-CSDN博客'
#------------------------------------------------------------
firststr = clipboard.paste()
dopstr = tspgetdopstring()
#------------------------------------------------------------
insertstr = '```mermaid\ngraph LR\n'
keystr = ''
orderstr1 = "零一二三四五六七八九十"
orderstr2 = '①②③④⑤⑥⑦⑧⑨⑩⑾⑿⒀⒁⒂⒃⒄⒅'
orderstr3 = 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ'
#------------------------------------------------------------
maxnum = 6
leftnum = 0
titlenumflag = 0
clipboardflag = 0
equalflag = 0
#------------------------------------------------------------
firsttitle = "文章目录"
for s in sys.argv[1:]:
#    printf(s)if s.isdigit():maxnum = int(s)elif s.find('||') >= 0:ss = s.split('||')if len(ss[0]) > 0:maxnum = int(ss[0])if len(ss[1]) > 0:leftnum = int(ss[1])else: leftnum = -1else:if len(ss[1]) > 0:maxnum = int(ss[1])else: maxnum = 3leftnum = -1elif s.find('|') >=0:ss = s.split('|')if len(ss[0]) > 0:maxnum = int(ss[0])if len(ss[1]) > 0:leftnum = int(ss[1])else: leftnum = -1else:if len(ss[1]) > 0:maxnum = int(ss[1])else: maxnum = 2leftnum = -1elif s.find('-') >=0:ss = s.split('-')if len(ss[0]) > 0:maxnum = int(ss[0])if len(ss[1]) > 0:leftnum = int(ss[1])else: leftnum = -1else:if len(ss[1]) > 0:maxnum = int(ss[1])else: maxnum = 2leftnum = -1titlenumflag = 1elif s.find('=') >=0:ss = s.split('=')if len(ss[0]) > 0:maxnum = int(ss[0])if len(ss[1]) > 0:leftnum = int(ss[1])else: leftnum = -1else:if len(ss[1]) > 0:maxnum = int(ss[1])else: maxnum = 3leftnum = -1titlenumflag = 1elif s.find('/') >=0:ss = s.split('/')if len(ss[0]) > 0:maxnum = int(ss[0])if len(ss[1]) > 0:leftnum = int(ss[1])else: leftnum = -1else:if len(ss[1]) > 0:maxnum = int(ss[1])else: maxnum = 3leftnum = -1elif s == '::':maxnum = 3leftnum = -1equalflag = 1elif s == '::':maxnum = 3leftnum = -1equalflag = 1elif s[0] == ':':maxnum = 2leftnum = -1equalflag = 1if len(s[1:]) > 0:maxnum = int(s[1:])elif s[0] == ':':maxnum = 2leftnum = -1equalflag = 1if len(s[1:]) > 0:maxnum = int(s[1:])elif s[0] == ';':maxnum = 2leftnum = -1equalflag = 1titlenumflag = 1if len(s[1:]) > 0:maxnum = int(s[1:])elif s == '.':titlenumflag = 0else:firsttitle = s
#------------------------------------------------------------
pasteflag = 0
if firsttitle == '*':if len(firststr) == 0:printf("No clipboard string.\a")exit()allstr = [s.replace('    ', '#').strip('\r') for s in firststr.split('\n') if len(s) > 0]pasteflag = 1
elif firsttitle == '**':clipboardflag = 1allstr = [s.replace('    ', '#').strip('\r') for s in firststr.split('\n') if len(s) > 0]firsttitle = "文章目录"maxnum = 2leftnum = -1
elif firsttitle == '++':clipboardflag = 1allstr = [s.replace('    ', '#').strip('\r') for s in firststr.split('\n') if len(s) > 0]firsttitle = "文章目录"maxnum = 2leftnum = -1equalflag = 1
else:#--------------------------------------------------------tspsendwindowkey(csdn_title, 'c', control=1,noreturn=1)time.sleep(.1)originstr = clipboard.paste()if len(originstr) == 0:tspsendwindowkey(csdn_title, ' ')tspsendwindowkey(csdn_title, "ac", control=1, noreturn=1)tspsendwindowkey(csdn_title, "z",  control=1, noreturn=1)allstr = clipboard.paste().split('\n')
#------------------------------------------------------------
title2num = []
title2total = 0
title3total = 0
if leftnum < 0:for s in allstr:if s[:1] == '#':if s.count('-') > 5: continueif s.count('=') > 5: continueif pasteflag == 0:if s.count('<') < 2: continueif s.count('>') < 2: continuesharpnum = len(s) - len(s.lstrip('#'))if sharpnum == 1:title2num.extend([0])elif sharpnum == 2:if maxnum >= 2:title2total += 1if len(title2num) > 0:title2num[-1] += 1elif sharpnum == 3:title3total += 1if title2total > 0:for i in range(len(title2num)):if sum(title2num[:i+1]) > title2total//2:leftnum = iif abs(sum(title2num[:i+1]) - title2total/2) - 0.1 * (len(title2num) / 2 - i) < abs(sum(title2num[:i]) - title2total/2):leftnum = i + 1if leftnum == 0 and len(title2num) > 2:leftnum = 1breakelse: leftnum = len(title2num)//2if len(title2num) < 3 and title2total < 3:if maxnum == 2: maxnum = 3
#------------------------------------------------------------
#printff(firsttitle, leftnum, maxnum)
titlenumber = [0]*6
#------------------------------------------------------------
for s in allstr:if s[:1] == '#':if s.count('-') > 5: continueif s.count('=') > 5: continueif pasteflag == 0:if s.count('<') < 2: continueif s.count('>') < 2: continuesharpnum = len(s) - len(s.lstrip('#'))startid = s.find('、')if startid < 0: startid = s.find(')')if startid < 0: startid = s.find(')')if startid < 0 and sharpnum > 1: startid = s.find('.')if startid < 0:if sharpnum == 1:startid = s.find('=red>')if startid < 0:s = s.replace('</font>', '')else:s = s[startid+5:].replace('</font>', '')else:startid = s.find('>')if startid >= 0: s = s[startid+1:].replace('</font>','')else:s = s[startid+1:].replace('</font>','')s = s.replace('※</center>', '').replace('</center>', '')#----------------------------------------------------s = s.replace(':', ':').replace('■ ', '').replace('○ ', '').replace('□ ', '').replace('● ', '')s = s.replace('☆ ', ':').replace('★ ', '').replace('○ ', '').replace('△ ', '').replace('▲ ', '')s = s.replace('◇ ', ':').replace('◆ ', '').replace('→', '-').replace('▓ ', '').replace('※ ', '')s = s.replace('# ', ':').replace('◎ ', '').replace('§ ', '').replace('√ ', '').replace('。 ', '.')s = s.replace(',', ',').replace('、', ',').replace('×', '*').replace('?', '?').replace('!', '!')s = s.replace('(', '').replace(')', '').replace('—', '-').replace('【', '').replace('】', '')s = s.replace('(', '').replace(')', '').replace('~', '-').replace('#', '').replace('||', '<br>')s = s.replace('“', '').replace('”', "").replace("&emsp;",'  ')startid = s.find('[^')if startid > 0: s = s[:startid]printff(sharpnum, s)#----------------------------------------------------if sharpnum > maxnum: continueaddstr = ''if sharpnum == 1:titlenumber[0] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))titlestr = ''if titlenumflag > 0:titlestr = '%02d.'%titlenum[0]if titlenum[0] <= leftnum:addstr = 'A%d(%s%s) === A((%s))'%(titlenum[0], titlestr, s, firsttitle)else:addstr = 'A((%s)) === A%d(%s%s)'%(firsttitle, titlenum[0], titlestr, s)if titlenum[0] == 1:addstr = addstr + '\n' + 'style A fill:#39f,stroke:#ccc,stroke-width:5px,color:#FFF'addstr = addstr + '\n' + 'style A%d fill:#9f9,stroke:#3a3,stroke-width:2px'%titlenum[0]titlenumber[1:] = [0]*len(titlenumber[1:])elif sharpnum == 2:titlenumber[1] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))if titlenum[0] <= leftnum:addstr = 'B%d%d(%s) --- A%d'%(titlenum[0], titlenum[1], s, titlenum[0])else:addstr = 'A%d --- B%d%d(%s)'%(titlenum[0], titlenum[0], titlenum[1], s)titlenumber[2:] = [0]*len(titlenumber[2:])elif sharpnum == 3:titlenumber[2] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))if titlenum[0] <= leftnum:addstr = 'C%d%d%d(%s) --- B%d%d'%(titlenum[0], titlenum[1], titlenum[2], s,titlenum[0], titlenum[1])else:addstr = 'B%d%d --- C%d%d%d(%s)'%(titlenum[0], titlenum[1],titlenum[0], titlenum[1], titlenum[2], s)addstr = addstr + '\n' + 'style C%d%d%d fill:#ffffff,stroke:#777,stroke-width:1px'%(titlenum[0],titlenum[1], titlenum[2])titlenumber[3:] = [0]*len(titlenumber[3:])elif sharpnum == 4:titlenumber[3] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))if titlenum[0] <= leftnum:addstr = 'D%d%d%d%d(%s) --- C%d%d%d'%(titlenum[0], titlenum[1], titlenum[2], titlenum[3], s,titlenum[0], titlenum[1], titlenum[2])else:addstr = 'C%d%d%d --- D%d%d%d%d(%s)'%(titlenum[0], titlenum[1], titlenum[2],titlenum[0], titlenum[1], titlenum[2], titlenum[3], s)addstr = addstr + '\n' + 'style D%d%d%d%d fill:#ffff,stroke:#999,stroke-width:1px,color:#0,stroke-dasharray: 5 5'%(titlenum[0],titlenum[1], titlenum[2], titlenum[3])titlenumber[4:] = [0]*len(titlenumber[4:])elif sharpnum == 5:titlenumber[4] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))if titlenum[0] <= leftnum:addstr = 'E%d%d%d%d%d(%s) -.- D%d%d%d%d'%(titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4], s,titlenum[0], titlenum[1], titlenum[2], titlenum[3])else:addstr = 'D%d%d%d%d -.- E%d%d%d%d%d(%s)'%(titlenum[0], titlenum[1], titlenum[2], titlenum[3],titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4], s)addstr = addstr + '\n' + 'style E%d%d%d%d%d fill:#ffffff,stroke:#333,stroke-width:0px'%(titlenum[0],titlenum[1], titlenum[2], titlenum[3], titlenum[4])titlenumber[5:] = [0]*len(titlenumber[5:])elif sharpnum == 6:titlenumber[5] += 1titlenum = [n for n in titlenumber if n > 0]if len(titlenum) < 6: titlenum.extend([0]*(6-len(titlenum)))if titlenum[0] <= leftnum:addstr = 'F%d%d%d%d%d(%s) -.- E%d%d%d%d%d'%(titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4], titlenum[5], s,titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4])else:addstr = 'E%d%d%d%d%d -.- F%d%d%d%d%d(%s)'%(titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4],titlenum[0], titlenum[1], titlenum[2], titlenum[3], titlenum[4], titlenum[5], s)addstr = addstr + '\n' + 'style F%d%d%d%d%d%d fill:#ffffff,stroke:#333,stroke-width:0px'%(titlenum[0],titlenum[1], titlenum[2], titlenum[3], titlenum[4], titlenum[5])if len(addstr) > 0: insertstr = insertstr + addstr + '\n'else:if s.find('**``关键词``**') > 0:startid = s.find('</font>')if startid > 0:keystr = s[startid+7:]elif pasteflag > 0:firsttitle = s.replace('||', "<br>")
#------------------------------------------------------------
insertstr = insertstr + '```\n'
#------------------------------------------------------------
if equalflag > 0:printf("Title2:%d"%title2total)if maxnum >= 2:isdim = insertstr.split('\n')title2count = 0title3count = 0for id,i in enumerate(isdim):if i.count(' --- ') == 1:ii = i.split(' --- ')if len(ii) == 2:titleflag = 0if ii[0].count('(') == 0:if ii[0].count('A') == 1:title2count += 1titleflag = 1else:if ii[1].count('A') == 1:title2count += 1titleflag = 1if ii[0].count('(') == 0:if ii[0].count('B') == 1:title3count += 1titleflag = 2else:if ii[1].count('B') == 1:title3count += 1titleflag = 2if titleflag != 2:if title2count <= (title2total + 1)//2:if ii[0].count('(') == 0:isdim[id] = ii[1] + ' --- ' + ii[0]else:if ii[0].count('(') > 0:isdim[id] = ii[1] + ' --- ' + ii[0]else:if title3count <= (title3total + 1)//2 or title3count <= 2:if ii[0].count('(') == 0:isdim[id] = ii[1] + ' --- ' + ii[0]else:if ii[0].count('(') > 0:isdim[id] = ii[1] + ' --- ' + ii[0]insertstr = '\n'.join(isdim)
#    printf(insertstr)
#    exit()
#------------------------------------------------------------
clipboard.copy(insertstr)
if clipboardflag > 0:printf(insertstr)exit()
#------------------------------------------------------------
time.sleep(.1)
tspsendwindowkey(csdn_title, "v", control=1,noreturn=1)
clipboard.copy(keystr)
#------------------------------------------------------------
printf('\a')
#------------------------------------------------------------
#        END OF FILE : CDM.PY
#============================================================

※ 博文总结 ※


  本文给出了直接将CSDN文章一键生成对应的思维导图目录的程序。将目录增加在博文的最开始,可以更好地显示博文的内部结构,作为原来CSDN网页中目录的补充,丰富博文的表达能力。


■ 相关文献链接:

  • 大红包高阻值电阻
  • 基于MM32F3273的MicroPython实验电路板 - 工作并不是正常

● 相关图表链接:

  • 图1.1.1 Markdown文中的目录

一键生成CSDN文章的思维导图目录相关推荐

  1. 生产力工具推荐,思维导图测评 #CSDN博文精选##思维导图##系统化学习#

    大家好~我是小C,全名是CSDN高校俱乐部,我的职责之一是担任"文章过滤器",精选大咖干货.助力学习之路. 你是否曾面对海量信息而无从下手? 你是否曾苦恼学习效果不佳.事倍功半? ...

  2. 【MarkDown】CSDN Markdown之思维导图mindmap详解

    文章目录 思维导图(Mindmap) 一个思维导图的例子 语法 形状 矩形 圆角矩形 圆形 爆炸 云朵 六边形 默认 图标和类 图标 类 不清晰的缩进 Markdown字符串 与库或网站资源集成 思维 ...

  3. TF之DD:利用Inception模型+GD算法生成带背景的大尺寸、高质量的Deep Dream图片——五个架构设计思维导图

    TF之DD:利用Inception模型+GD算法生成带背景的大尺寸.高质量的Deep Dream图片--五个架构设计思维导图 目录 TF中的Deep Dream实践:利用Inception模型+GD算 ...

  4. 思维导图 基础篇(11)应用-文章分析-框架法

    系列文章解读&说明: 本系列文章主要内容是 思维导图 基础课,旨在帮助更多 热爱学习的伙伴 更具体的了解思维导图,同时也会让 更多的伙伴从 思维导图 认知 误区中走出. 系列文章总纲链接为:专 ...

  5. CV之IE之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成不同尺寸和质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)—五个架构设计思维导图

    CV之IE之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成不同尺寸和质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)-五个架构设计思维导图 ...

  6. 如何把思维导图秒变成幻灯?

    场景 有一天给研究生上课,几个学生分别上讲台展示仿真建模作业. 我打开笔记本电脑,一边开着仿真工具验证他们的代码,一边用思维导图软件记录他们讲解中出现的问题. 问题过多的时候,我示意学生下来.走上讲台 ...

  7. HTML、CSS的思维导图

    目录 前言 HTML.CSS的思维导图 HTML的思维导图 ​编辑CSS的思维导图 总结 前言 前端开发的基础的基础. 虽然常用,但是也有可能由遗漏的知识点. 拿思维导图镇一下. HTML.CSS的思 ...

  8. ChatGpt2步制作流程图与思维导图,你确定不来看一下吗?

    目录 建议收藏,以备不时之需 一.流程图 1.输入神奇指令 效果展示 神奇指令: 过程展示 2.代码导入diagrams生成流程图 二.思维导图 1.输入神奇的指令 神奇的指令 过程展示 2.使用Xm ...

  9. XMind思维导图2022下载激活安装超详细教程

    XMind思维导图2022是发布的一款全功能的思维导图软件,拥有专业实用的功能,包括思维管理.商务演示.与办公软件协同工作等功能,让您的办公更有效,还加入了演讲模式,在演说模式可自动生成转场动画和布局 ...

最新文章

  1. ssh远程执行多个命令
  2. 自己编译redhat 9.0内核心得
  3. python安装requests
  4. Android项目实战视频教程_快递轨迹查询应用开发
  5. 满汉全席(洛谷-P4171)
  6. 异步与延迟加载JavaScript的方法
  7. C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:...
  8. 印度神曲之五(Ayka dajiba)
  9. vb.net 教程6-8 线程优先级
  10. 公众号快速注册并认证小程序
  11. 误码率matlab,关于误码率的问题 急!!!!!
  12. Swift游戏实战-跑酷熊猫 07 平台的移动
  13. audiosever耗电_audio服务自动停止 - 卡饭网
  14. 4种常见分支模式解析及优劣对比 | 研发效能提升36计
  15. Python在命令行模式下如何退出命令行
  16. 虚拟自动取款机ATM设计(C语言)
  17. 百度云盘功能需求分析
  18. python随机生成IP地址
  19. 关于木马Autoit
  20. JavaBean 和 pojo类区别

热门文章

  1. 关于xshell连接虚拟机和虚拟机连网
  2. 201621123069 《Java程序设计》第十一周学习总结
  3. Postfix的bcc邮件备份
  4. centos6.5报错:checking filesystems failed问题处理
  5. 详谈jsp和servlet的区别
  6. mac svn 返回svn upgrade等出错
  7. python--复习之路的目录
  8. 构建dubbo分布式平台-maven构建ant-framework框架的pom.xml文件配置
  9. 环境变量方式使用 Secret - 每天5分钟玩转 Docker 容器技术(158)
  10. SSRS 2012 仪表 -- 关键绩效指标