文本处理 – 注释(自动)LaTeX源文件,使其更具可读性

我正在寻找一种简单的方法来执行以下操作:

输入:

\begin{document}
...
\section{}
...
\subsection{}
...
\subsubsection{}
...
\section{}
...
\end{document}

输出:

\begin{document}
...
%1
\section{}
...
%1.1
\subsection{}
...
%1.1.1
\subsubsection{}
...
%2
\section{}
...
\end{document}

这样做的目的是使长文档更具可读性.
我想知道我在整个文件计划中的位置.

最佳答案
我有一个很有用的快速解决方案.请注意仅供个人使用(1);它可以被改进,添加就地编辑,错误控制,等等.但我认为它也很有用.这个想法是利用LaTeX编号本身.

因此,首先,您需要为文档添加标签(尽管如此,这仍然很好):

\documentclass[12pt]{article}
\begin{document}
\section{a}
\label{sec:a}

\section{b}
\label{sec:b}

\subsection{b a}
\label{sec:ba}

\newpage

\subsection{b b}
\label{sec:bb}

\section{c}
\label{sec:c}
\end{document}

接下来运行乳胶,假设它叫做walla.tex.现在你运行这个小python脚本:

#!/usr/bin/env python
#
# 
import sys
import re

labels=[]
# build a list of label
for l in open(sys.argv[1] + ".aux"):
    if l.find("newlabel{") != -1: 
        m = re.search(r'\\newlabel{(.*?)}{{(.*?)}{(.*?)}}', l)
        if m:
            labels.append("label: %s will be number: %s at page: %s" % (
                m.group(1), m.group(2), m.group(3)))
        else:
            labels.append(l)

# scan input file
for l in  open(sys.argv[1] + ".tex"):
    if l.find("\\label") != -1:
        # we have a label, try to match it
        m = re.search(r'\\label{(.*?)}', l)
        # if not m: continue ERROR not managed here
        key = m.group(1) 
        for lab in labels:
            if lab.find(key) != -1:
                # modify this to pretty print
                sys.stdout.write("%%%%%% %s\n" % lab.strip())
                break
    # output the tex file avoiding old ones
    if not l.startswith(r'%%% label'):
        sys.stdout.write(l)

将其命名为find_tex_labels,使其可执行,并将其作为find_tex_labels walla>运行. walla_annotated.tex(注意,参数中没有扩展名).

您将在输出中添加带注释的LaTeX文件:

\documentclass[12pt]{article}
\begin{document}
\section{a}
%%% label: sec:a will be number: 1 at page: 1
\label{sec:a}

\section{b}
%%% label: sec:b will be number: 2 at page: 1
\label{sec:b}

\subsection{b a}
%%% label: sec:ba will be number: 2.1 at page: 1
\label{sec:ba}

\newpage

\subsection{b b}
%%% label: sec:bb will be number: 2.2 at page: 2
\label{sec:bb}

\section{c}
%%% label: sec:c will be number: 3 at page: 2
\label{sec:c}
\end{document}

…这适用于所有标签.当我在没有LaTeX的设备上进行编辑时,我觉得它对于交叉引用等式非常有用.您现在可以用原始的walla.tex替换新的walla.tex.

你有责任让事情保持同步……而不是在任何地方使用“%%% label”评论.

脚注:

(1)我保证很多次改进它.然后鉴于我是唯一使用它的人,我会在出现错误时纠正错误……并且永远不会抽出时间来清理它.

转载注明原文:文本处理 – 注释(自动)LaTeX源文件,使其更具可读性 - 代码日志