是否有工具可以生成每章/节的统计数据?(LaTeX)

是否有工具可以生成每章/节的统计数据?(LaTeX)

我想要对我使用 LaTeX 编写的文档(例如几本书)有一个总体概述,我需要工具来根据 LaTeX 文档(由包含在主文档中的许多文件组成)按章节/部分生成统计数据。

IE,可以生成包含以下内容的“概述”文档(每节/章):

  • 字数/字符数(不是行数,因为它取决于页面大小)

  • 参考文献数量

  • 数字数量

  • 子节数

  • ETC。

我目前只使用 refcheck 来检查我是否遗漏了引用某些内容,并且我编写了一个 shell 脚本(http://atrent.it/doku.php/divertissements:latexstats) 提供了一些统计数据,但基于文件,对于我的目的来说还不够。

我的“超级”目的还在于大致了解整个作品每个章节/部分的完成百分比。

谢谢

答案1

这是一个部分(但相当完整)的答案,文本计数工具(包含在texlive-extra-utils在 Debian Linux 上,正如我在评论中提到的那样,是我发现的最接近的东西,它只缺少引用计数。

以下是一个例子文本计数(使用选项“-col -merge -incbib”)输出,在我正在编写的“大型”(约 300 页 A5 页)文档上运行:

File: main.tex
Encoding: utf8
Words in text: 54907
Words in headers: 614
Words outside text (captions, etc.): 4365
Number of headers: 224
Number of floats/tables/figures: 58
Number of math inlines: 92
Number of math displayed: 6
Subcounts:
  text+headers+captions (#headers/#floats/#inlines/#displayed)
  567+5+0 (1/0/0/0) _top_
  694+1+44 (1/0/0/0) Chapter: Introduzione}\label{chap:intro
  184+3+38 (1/0/0/0) Section: I Sistemi Embedded}\label{sistemaembedded
  220+1+0 (1/0/0/0) Subsection: PLC
  535+1+86 (1/0/0/0) Subsection: Microcontrollori}\label{Microcontrollori
  404+1+38 (1/0/0/0) Subsection: SoC
  144+3+0 (1/0/0/0) Section: Struttura del testo
  0+2+0 (1/0/0/0) Chapter: Concetti generali}\label{chap:concetti
  484+2+55 (1/0/0/0) Section: Real Time
  429+4+67 (1/1/0/0) Section: Sistemi ``monoprogrammati'' e ``multiprogrammati''
  1063+3+268 (1/0/0/0) Section: Modo di pensare}\todo{esploderlo in più subsect
  0+6+0 (1/0/0/0) Section: Stili di programmazione: race conditions, watchdogs (?)
  0+4+0 (1/0/0/0) Section: cpu power e corrente
  0+9+0 (1/0/0/0) Section
  11+8+0 (1/0/0/0) Section: dimensioni fisiche, forse già trattato sparso nel testo
  0+5+0 (1/0/0/0) Section: Open hardware (controllo, riproducibilità, costi)
  0+6+0 (1/0/0/0) Section: tecniche costruttive (per produzione di massa)
  0+2+0 (1/0/0/0) Section: ***harsh environments
  0+10+0 (1/0/0/0) Section
  0+7+0 (1/0/0/0) Section: (atrent) spiegare il concetto di callback function
  0+17+0 (1/0/0/0) Section
  0+12+0 (1/0/0/0) Section
  19+2+0 (1/0/0/0) Section: PID controller
  0+15+0 (1/0/0/0) Section
  15+9+0 (1/0/0/0) Section: (atrent) add sezione "isteresi" in intro o concetti generali
  126+3+19 (1/0/0/0) Chapter: Richiami di elettronica} \label{chap:elettronica
  0+3+0 (1/0/0/0) Section: Richiami sui principi
  321+1+0 (1/0/1/0) Subsection: Elettricità
  193+3+0 (1/0/4/3) Subsection: Legge di Ohm}\label{sec:ohm
  546+3+70 (1/1/2/0) Subsection: Continua e alternata
  876+1+32 (1/1/1/0) Subsection: Segnali}\label{sec:segnali
  399+2+12 (1/4/1/1) Section: Forme d'onda}\label{sec:formeonda
  95+3+70 (1/0/0/0) Section: Componenti di base
  92+1+0 (1/0/0/0) Subsection: Interruttori
  95+1+21 (1/0/0/0) Subsection: Lampadine
  86+1+32 (1/0/0/0) Subsection: Relè}\label{sec:relè
  317+1+15 (1/2/5/0) Subsection: Resistenze}\label{sec:resistenze
  288+1+4 (1/1/0/0) Subsection: Condensatori}\label{sec:condensatori
  221+4+0 (1/0/10/0) Subsection: Pile, batterie, accumulatori, generatori, ...}\label{sec:pilebatterie
  544+15+4 (5/0/14/2) Subsection: Serie e parallelo
  447+2+15 (1/3/7/0) Subsection: Circuiti RC
  467+4+120 (1/1/2/0) Section: PWM (Pulse Width Modulation)}\label{sec:pwm
  205+1+4 (1/1/0/0) Section: Semiconduttori}\label{sec:semiconduttori
  368+3+56 (1/2/0/0) Subsection: Diodi e LED
  423+1+76 (1/0/2/0) Subsection: Transistor}\label{sec:transistor
  678+7+177 (2/1/2/0) Subsection: Circuiti integrati
  339+3+0 (1/0/1/0) Section: Strumenti di misura
  315+3+33 (1/0/0/0) Subsection: ``Tester di circuito''
  91+1+11 (1/2/0/0) Subsection: Voltmetro
  212+3+90 (1/0/1/0) Subsection: Amperometro, pinza amperometrica
  146+2+58 (1/0/1/0) Subsection: Ohmmetro, prova-diodi
  48+2+3 (1/1/0/0) Subsection: Multi-tester/multimetro
  132+1+3 (1/1/0/0) Subsection: Oscilloscopio
  360+2+70 (1/2/0/0) Section: Montaggio fisico
  483+4+82 (1/0/0/0) Section: Conversione AD e DA}\inFuturo{(atrent) approfondire un po', vedi altro todo sotto
  304+3+92 (1/0/2/0) Section: Sensori e attuatori
  160+4+0 (1/0/0/0) Section: Sensori (e attuatori!) MEMS
  406+1+46 (1/2/8/0) Section: Multiplexing
  111+2+0 (1/0/0/0) Chapter: Architetture Embedded}\label{chap:architetture
  234+3+0 (1/0/0/0) Section: Instruction Set Architecture
  196+1+0 (1/0/0/0) Subsection: CISC
  230+1+0 (1/0/0/0) Subsection: RISC
  223+1+0 (1/0/0/0) Subsection: Endianness
  165+1+49 (1/0/0/0) Section: ARM}\label{ARM
  163+3+0 (1/0/0/0) Subsection: Architettura e \textit{core}
  313+1+0 (1/0/0/0) Section: MIPS}\label{MIPS
  275+1+0 (1/0/1/0) Section: ARC
  272+1+78 (1/0/1/0) Section: AVR
  160+1+0 (1/0/0/0) Section: Xtensa
  0+2+0 (1/0/0/0) Section: Esempi pratici
  441+6+0 (2/0/0/0) Subsection: MCU, SoC e Board
  379+3+8 (2/0/0/0) Subsection: Arduino}\label{Arduino
  605+7+50 (4/3/0/0) Subsection: Discovery STM32
  71+1+18 (1/0/0/0) Subsection: ESP8266}\label{sec:esp8266
  110+4+1 (2/1/0/0) Subsection: Ci40} \label{sec:CI40
  461+7+36 (3/1/0/0) Subsection: BeagleBone Black} \label{sec:BeagleBoneBlack
  109+1+0 (1/0/0/0) Subsection: PIC32
  90+1+44 (1/0/0/0) Subsection: NodeMCU
  743+6+86 (2/0/0/0) Section: Implementazione Hardware}\label{impl
  112+2+0 (1/0/0/0) Subsection: Form Factor} \label{subsec:formfactor
  233+1+0 (1/0/0/0) Subsection: PCB} \label{subsec:PCB
  168+1+0 (1/0/0/0) Subsection: Costo} \label{subsec:cost
  0+5+0 (1/0/0/0) Chapter: Memorie, I/O e comunicazione}\label{chap:io
  389+1+0 (1/0/0/0) Section: Memorie}\label{sec:Memory
  294+4+45 (1/0/0/0) Subsection: La memoria di sistema
  1149+7+69 (3/0/0/0) Subsection: La memoria di massa
  99+3+0 (1/0/0/0) Section: Bus e periferiche}\label{bus-periferiche
  646+3+21 (1/2/0/0) Subsection: RS-232 Serial port
  5+1+0 (1/0/0/0) Subsection: NMEA}\todo{(atrent) faccio io se vuoi
  304+1+7 (1/2/1/0) Subsection: I2C
  286+1+0 (1/0/3/0) Subsection: I2S
  201+1+4 (1/1/1/0) Subsection: SPI
  436+1+6 (1/1/0/0) Subsection: CAN-BUS
  414+1+0 (1/0/0/0) Subsection: Ethernet
  495+1+62 (1/1/3/0) Subsection: GPIO}\label{sec:gpio
  212+2+10 (1/0/0/0) Subsection: Bit banging
  434+1+127 (1/0/0/0) Subsection: JTAG}\label{sec:JTAG
  23+1+0 (1/0/0/0) Section: Rete}\label{protocolli_rete
  635+1+25 (1/1/0/0) Subsection: MQTT}\label{MQTT
  159+1+0 (1/0/0/0) Subsection: OSC}\label{sec:osc
  5+1+0 (1/0/0/0) Subsection: LoRa}\todo{(atrent) faccio io se vuoi
  27+1+0 (1/0/0/0) Subsection: Firmata}\todo{(atrent) faccio io se vuoi
  35+3+0 (1/0/0/0) Chapter: Il sistema operativo}\label{chap:os
  153+1+0 (1/0/0/0) Section: Introduzione
  902+7+1 (3/0/0/0) Subsection: Classificazione degli OS
  262+1+49 (1/0/0/0) Section: FreeRTOS}\label{sec:freertosbreve
  0+4+0 (1/0/0/0) Section: I sistemi GNU/Linux
  454+5+18 (1/0/0/0) Subsection: Storia dei sistemi GNU/Linux
  957+7+35 (3/0/0/0) Subsection: Il kernel Linux
  168+2+0 (1/0/0/0) Section: Root Filesystem
  274+3+2 (1/0/2/0) Subsection: La libreria C} \label{clib
  594+1+30 (1/0/0/0) Subsection: Init} \label{init
  437+2+0 (1/0/0/0) Subsection: La shell
  583+1+54 (1/0/0/0) Section: Bootloader} \label{sec:bootloader
  370+4+0 (2/0/0/0) Subsection: U-boot
  239+4+24 (1/1/0/0) Section: La fasi di boot
  153+3+0 (1/0/0/0) Chapter: Configurazione GNU/Linux}\label{chap:gnulinux
  89+3+29 (1/0/0/0) Section: Ambiente di sviluppo
  1210+6+86 (2/0/1/0) Subsection: Toolchain
  1799+22+388 (6/2/0/0) Subsection: La compilazione del Kernel Linux} \label{sec:kernelcompile
  1303+5+151 (2/0/0/0) Subsection: Build system
  0+1+0 (1/0/0/0) Section: Buildroot
  363+5+0 (2/0/0/0) Subsection: Inizializzazione dell'ambiente
  622+9+77 (3/2/0/0) Subsection: Configurazione di buildroot
  194+3+6 (1/0/0/0) Subsection: Compilazione del rootfs} \label{subsec:comprootfs
  425+4+15 (1/0/0/0) Subsection: Variabili di ambiente U-boot} \label{subsec:uEnv
  276+3+0 (1/0/0/0) Section: Dispositivo di memoria} \label{sec:memorydevice
  946+8+81 (3/0/0/0) Subsection: Il partizionamento classico
  238+5+0 (1/0/0/0) Section: Esempio di configurazione della SD
  18+1+0 (1/0/0/0) Chapter: FreeRTOS}\label{sec:freertos
  113+1+0 (1/0/0/0) Section: Note
  231+3+6 (1/0/0/0) Section: Introduzione a FreeRTOS
  60+3+0 (1/0/0/0) Section: Caratteristiche di FreeRTOS
  658+3+49 (1/0/0/0) Section: FreeRTOS concetti basilari
  144+2+0 (1/0/0/0) Section: Usare FreeRTOS
  352+2+0 (1/0/0/0) Subsection: Naming Conventions
  495+4+99 (1/0/0/0) Section: Gestione della memoria HEAP
  134+1+0 (1/0/0/0) Section: Task
  308+3+7 (1/0/0/0) Subsection: Creazione del task
  555+1+45 (1/0/0/0) Section: Queue
  456+1+0 (1/0/0/0) Section: Timer
  160+1+3 (1/0/0/0) Section: Interrupt
  302+1+0 (1/0/0/0) Section: Semafori
  205+3+11 (1/0/0/0) Section: Esempio:Led Blink
  411+3+21 (1/0/0/0) Chapter: Arduino e Wiring}\label{chap:wiring
  419+4+7 (1/0/0/0) Section: I punti di forza
  258+4+41 (1/0/0/0) Section: I punti di debolezza
  216+4+0 (1/0/0/0) Section: Struttura di uno \textit{sketch}
  233+2+20 (1/0/0/0) Section: Il linguaggio
  446+5+8 (1/0/7/0) Subsection: Tipi di dato e variabili}\label{tipidatoarduino
  200+3+0 (1/0/1/0) Subsection: Espressioni e operatori}\label{sec:espressioni
  248+1+20 (1/0/0/0) Subsection: Array
  136+4+0 (1/0/0/0) Subsection: Direttive \#define e \#include
  76+1+0 (1/0/0/0) Subsection: Commenti
  179+3+0 (1/0/0/0) Subsection: Costrutti di ``selezione''
  182+3+0 (1/0/0/0) Subsection: Costrutti di ``ripetizione''
  158+3+0 (1/0/0/0) Subsection: Definizione di funzioni
  82+2+0 (1/0/0/0) Subsection: Funzioni predefinite
  26+1+0 (1/0/0/0) Subsection: Matematiche
  18+1+0 (1/0/0/0) Subsection: Tempo
  225+2+3 (1/1/1/0) Subsection: I/O
  140+3+0 (1/0/0/0) Subsection: Uso della seriale
  416+2+45 (1/0/6/0) Subsection: Gestione interrupt}\label{sec:interrupt
  204+3+6 (1/1/0/0) Subsection: \textit{Shield} (con esempio)
  116+3+0 (1/0/0/0) Chapter: Ambiente di Test}\label{chap:testenv
  253+7+0 (1/0/0/0) Section: Uso della rete in ambiente di test
  114+1+8 (1/1/0/0) Section: Rete}\label{sec:rete
  211+3+31 (1/0/0/0) Subsection: Topologie di rete
  331+4+0 (1/0/0/0) Section: Ambiente di test Linux}\label{sec:testlinux
  194+1+0 (1/0/0/0) Subsection: NFS
  156+1+0 (1/0/0/0) Subsection: TFTP
  107+6+0 (1/0/0/0) Subsection: Utilizzo di NFS/TFT in U-Boot
  63+2+0 (1/0/0/0) Chapter: Esempi pratici}\label{chap:esempi}\todo{(atrent) la maggior parte sono a base arduino/esp8266, eventualmente aggiungere esempi linux?
  611+7+30 (1/0/0/0) Section: Abilitare un led tramite GPIO su Linux
  260+5+13 (1/1/0/0) Section: Creare una ``termo-ventola'' con Arduino
  1028+1+5 (1/1/0/0) Section: **TaskScheduler}\label{sec:taskscheduler
  1414+1+0 (1/0/0/0) Section: **Firmata
  33+1+0 (1/0/0/0) Section: ***TVout
  176+4+0 (1/0/0/0) Section: ***LED matrix e strip
  27+2+0 (1/0/0/0) Section: ***JSON parsing
  71+6+65 (1/0/0/0) Section: ***Rilevatore presenza PIR+DHT11 via MQTT
  6+1+0 (1/0/0/0) Subsection: Librerie
  37+2+4 (1/1/0/0) Subsection: Schema elettrico
  70+1+0 (1/0/0/0) Subsection: Inizializzazioni
  169+4+4 (1/1/0/0) Subsection: Corpo principale del programma
  252+9+15 (1/0/0/0) Section: **Comandare un ``robot'' usando un cellulare tramite protocollo OSC
  244+1+6 (1/1/0/0) Subsection: L'hardware
  482+2+190 (1/6/0/0) Subsection: Il software
  27+1+0 (1/0/0/0) Section: ***OTA
  69+5+0 (1/0/0/0) Chapter: ******************Note interne + materiale da integrare
  247+3+0 (1/0/0/0) Chapter: Quarta di copertina

顺便说一句,如果我“git”统计输出,我可以看到版本之间的(re/pro)进度。

相关内容