
Ich schreibe in meinen Dokumenten gerne an den Anfang jedes Absatzes einen „besonderen“ Kommentar mit einem Titel, etwa so:
\section{Introduction}
% 1.0 Visually tracking balls is an interesting problem.
Text related to why tracking balls is important, blah, blah, blah.
Blah, blah, blah.
% 1.1 Tracking balls is difficult because of these challenges.
Text relating the challenges, blah, blah, blah.
More blah, blah, blah.
% 2.0 Previous work.
Text relating the existing work on tracking balls, blah, blah, blah.
Blah, blah, blah.
Dies hilft mir, den Inhalt meiner Dokumente gut strukturiert zu halten.
Ich möchte die Struktur eines Dokuments extrahieren: Abschnittsbefehle (z. B. \chapter
, \section
und dergleichen) und „spezielle“ Kommentare am Anfang jedes Absatzes.
Ich möchte eine LaTex-Quelldatei (oder eine Gruppe davon, falls die Hauptdatei andere Quelldateien enthält) analysieren und eine neue Datei erstellen, die nur die Abschnittsbefehle und die „speziellen“ Kommentare enthält, die in normalen Text (unkommentiert) oder, noch besser, in eine Aufzählungsliste umgewandelt werden.
Die beim Ausführen des Parsers für den vorherigen Code generierte Ausgabe wäre also:
\section{Introduction}
\begin{itemize}
\item 1.0 Visually tracking balls is an interesting problem.
\item 1.1 Tracking balls is difficult because of these challenges.
\item 2.0 Previous work.
\end{itemize}
Die beste Lösung, die ich bisher gefunden habe, besteht darin, dass ich die speziellen Kommentare mit einer Zeichenfolge kennzeichne (d. h. sie mit „%$“ beginne) und dann die Vorkommen von „%$“ und der Abschnittsbefehle in der Quelldatei durchsuche.
Dank im Voraus.
Antwort1
Dies ist mit allen Befehlszeilentools problemlos möglich. Ich verwende hier grep und sed (in Cygwin Bash unter Windows), aber andere Systeme haben ähnliche oder Sie können Perl verwenden.
Wenn zz.tex
es sich um Ihre Originaldatei handelt,
Die Kommandozeile von
$ grep "\(sub\)*section\|^%" zz.tex | sed -e '/^\\s/ a \\\\begin{itemize}' -e 's/^%/\\item /' -e '$ a \\\\end{itemize}'
Ausgänge
\section{Introduction}
\begin{itemize}
\item 1.0 Visually tracking balls is an interesting problem.
\item 1.1 Tracking balls is difficult because of these challenges.
\item 2.0 Previous work.
\end{itemize}
Antwort2
Hier verwende ich einen „Inhaltsverzeichnis“-Ansatz, d. h. ich schreibe Informationen explizit in die AUX-Datei und verarbeite sie von dort aus. BEARBEITET, um zwei Ansätze darzustellen: 1) wo die „XY-Zusammenfassung“ im Originaldokument enthalten ist und 2) wo die Zusammenfassung ein externes Dokument ist.
In beiden Fällen habe ich meine Tex-Datei, in der ich das Makro wiederholt verwenden kann, \addxyzline{type}{content}
um der AUX-Datei verschiedene Zeilen hinzuzufügen. Ich habe auch das \writexyz
Makro, das die AUX-Datei liest und eine XYZ-Datei erstellt. Sie kann im Quelldokument nach erscheinen \begin{document}
, entweder bevor eine Unterteilung erfolgt ist oder nachdem die Unterteilung vollständig erfolgt ist.
ANSATZ 1: XYZecutive-Zusammenfassung im selben Dokument
Bei diesem Ansatz \writexyz
schreibt das Makro nicht nur Dinge in die .xyz-Datei, sondern verarbeitet das Dokument im zweiten Durchgang auch und formatiert den Inhalt entsprechend.
Die Zusammenfassung (mit allen \addxyzline
Informationen) erscheint beim Aufruf von \writexyz
. In diesem MWE platziere ich sie nach dem Inhaltsverzeichnis, aber vor dem Dokumentinhalt. Ich spiele mit der \addtocontents
Makrodefinition, damit die Unterteilung der Zusammenfassung nicht als doppelte Unterteilung im Inhaltsverzeichnis endet.
\documentclass{article}
\newcommand\addxyzline[2]{\addtocontents {xyz}{\protect \xyzline {#1}{#2}}}
\let\svaddtocontents\addtocontents
\makeatletter
\newcommand\writexyz{%
\renewcommand\addtocontents[2]{\relax}%
\clearpage\setcounter{section}{0}\noindent%
{\Huge\hrulefill XYZecutive Summary\hrulefill\par}%
\newcommand\xyzline[2]{\expandafter\csname##1\endcsname{##2}}\@starttoc{xyz}%
\par\noindent\hrulefill\clearpage\setcounter{section}{0}%
\let\addtocontents\svaddtocontents
}
\makeatother
\begin{document}
\tableofcontents% CAN UNCOMMMENT TO SEE THAT toc WORKS FINE
\writexyz
\section{Introduction}
\addxyzline{section}{Introduction}
\addxyzline{begin}{itemize}
\addxyzline{item}{1.0 Visually tracking balls is an interesting problem.}
Text related to why tracking balls is important, blah, blah, blah.
Blah, blah, blah.
\addxyzline{item}{1.1 Tracking balls is difficult because of these challenges.}
Text relating the challenges, blah, blah, blah.
More blah, blah, blah.
\addxyzline{item}{2.0 Previous work.}
Text relating the existing work on tracking balls, blah, blah, blah.
Blah, blah, blah.
\addxyzline{end}{itemize}
\end{document}
ANSATZ 2: Separates Zusammenfassungsdokument
Hier erstelle ich meinen Dokumenttext wie zuvor, \writexyz
schreibe die Zusammenfassung jedoch nicht in dasselbe Dokument, sondern lediglich in die .xyz-Datei.
\documentclass{article}
\newcommand\addxyzline[2]{\addtocontents {xyz}{\protect \xyzline {#1}{#2}}}
\makeatletter
\newcommand\writexyz{\newcommand\xyzline[2]{}\@starttoc{xyz}}
\makeatother
\begin{document}
%\tableofcontents% CAN UNCOMMMENT TO SEE THAT toc WORKS FINE
\section{Introduction}
\addxyzline{section}{Introduction}
\addxyzline{begin}{itemize}
\addxyzline{item}{1.0 Visually tracking balls is an interesting problem.}
Text related to why tracking balls is important, blah, blah, blah.
Blah, blah, blah.
\addxyzline{item}{1.1 Tracking balls is difficult because of these challenges.}
Text relating the challenges, blah, blah, blah.
More blah, blah, blah.
\addxyzline{item}{2.0 Previous work.}
Text relating the existing work on tracking balls, blah, blah, blah.
Blah, blah, blah.
\addxyzline{end}{itemize}
\writexyz
\end{document}
Bei der Bildschirmausgabe erzeugt die Kompilierung die Ausgabe des Originaldokuments, ohne Rücksicht auf den \addxyzline
Inhalt:
Es wird jedoch auch eine .xyz-Datei erstellt (in diesem Fall xyz.xyz, da ich meine Originaldatei xyz.tex genannt hatte) mit den folgenden Informationen:
\xyzline {section}{Introduction}
\xyzline {begin}{itemize}
\xyzline {item}{1.0 Visually tracking balls is an interesting problem.}
\xyzline {item}{1.1 Tracking balls is difficult because of these challenges.}
\xyzline {item}{2.0 Previous work.}
\xyzline {end}{itemize}
mit all meinen \addxyzline
Informationen.
Dann habe ich eine sehr einfache zweite Tex-Datei:
\documentclass{article}
\newcommand\xyzline[2]{\csname#1\endcsname {#2}\par}
\begin{document}
\input{xyz.xyz}% NAME OF .xyz FILE GOES HERE IN THE ARGUMENT
\end{document}
welches die xyz-Zusammenfassungsinformationen liefert
Nachtrag
Wie man sehen kann, \addxyzline
ist das erste Argument der Text eines beliebigen Makronamens. In meinem MWE habe ich "Abschnitt", "Beginn", "Element" und "Ende" verwendet. Andere nützliche Beschwörungsformeln könnten sein
\addxyzline{relax}{this is just text added on the same line}
\addxyzline{newline}{this is just text on a new line}
Antwort3
Hier ist eine ConTeXt-Lösung, die den Ansatz des „Inhaltsverzeichnisses“ verwendet. Wählen Sie eine Abschnittsüberschrift aus, die Sie nicht verwenden, subsubject
und verwenden Sie diese, um IhrenGliederungim Hauptdokument:
\setuphead[subsubject][placehead=empty, before=,after=, incrementnumber=yes]
\starttext
\section{Introduction}
\subsubject{1.0 Visually tracking balls is an interesting problem.}
Text related to why tracking balls is important, blah, blah, blah.
Blah, blah, blah.
\subsubject{1.1 Tracking balls is difficult because of these challenges.}
Text relating the challenges, blah, blah, blah.
More blah, blah, blah.
\subsubject{2.0 Previous work. }
Text relating the existing work on tracking balls, blah, blah, blah.
Blah, blah, blah.
\stoptext
In der ersten Zeile placehead=empty
wird ConTeXt angewiesen, den Kopf (in diesem Fall den Unterbetreff) nicht in die Ausgabe aufzunehmen. incrementnumber=yes
Dadurch muss sichergestellt werden, dass der Inhaltsverzeichniseintrag so geschrieben wird, dass er über andere Dateien zugänglich ist.
Erstellen Sie als Nächstes eine separate Datei, um eine Gliederung zu erstellen. Ich gehe davon aus, dass der Name der Hauptdatei war test.tex
.
\starttext
\ctxlua{job.load("test.tuc")}
\placelist[section,subsubject]
[pagenumber=no, headnumber=no]
\stoptext
was gibt