Latex-Tags mit String.replaceAll entfernen

fastfiler

Mitglied
Hallo,

der Topic-Titel beschreibt eigentlich schon alles ganz gut. Ich lese Latex-Files ein und möchte bestimmte Tags entfernen bzw. besonders behandeln.

Ein Beispiel hiefuer wäre \section{Test}.

Mit der Methode replaceAll(String str, String str) der Klasse String die u.a. mit regex umgehen kann möchte ich am oben genannten beispiel das \section entfernen.

Ich hab schon x Möglichkeiten probiert aber keine Ausdruck führt zum gewünschten Ergebnis, hat vielleicht jmd eine Idee bzw. Vorschlag?

mfg & thx

fasti
 
alles bis auf den reinen text und die section sollen übrigen bleiben, die usepackage, documentclass, begin/end document soll raus. es reicht auch wenn man das \section durch ein " " (space bzw. blank) ersetzt und anschließend einfach radikal mit einem regex drüber geht er alles entfernt, das mit einem \ anfängt. hauptsache die "sections" bleiben erhalten. ich habe bereits für javascript etwas gefunden das aus latex html erzeugt. leider ist javascript != java. aber vielleicht dient es als basis.

Code:
strOutput = strOutput.replace(/\\section\*\s*\{([^}]*)\}/g, "<h1>$1</h1>")
strOutput = strOutput.replace(/\\subsection\*\s*\{([^}]*)\}/g, "<h2>$1</h2>")
strOutput = strOutput.replace(/\\subsubsection\*\s*\{([^}]*)\}/g, "<h3>$1</h3>")

Code:
\documentclass{article}
\usepackage{ngerman,a4wide}
\usepackage[latin1]{inputenc)
\begin{document}
\section{Kapitel 1}
Die Programmierung in einer objektorientierten Sprache und die Speicherung
der Daten in einer relationalen Datenbank sind heutzutage ein gaengiges
Szenario. Sollen Objekte in die Datenbank geschrieben werden bzw. aus der
Datenbank gelesen werden, sind umfangreiche Konvertierungsoperationen
objektorientiert relational notwendig.
\section{Kapitel 2}
Greifen mehrere Programmroutinen auf den gleichen Datenbestand zu, so kann
man statt dem mehrmaligen Ausfuehren einer Datenbank-Query den Kerngedanken
des Prototype-Pattern einsetzen. Hierbei wird der notwendige Datenbestand
nur lediglich einmal physisch aus der Datenbank ausgelesen und bei spaeterer
Verwendung geklont. Der Prototyp verhaelt sich somit wie eine Art Cache.
\end{document}
 
Hallo!

Muss das nicht:
Code:
  \usepackage[latin1]{inputenc}

anstatt:
Code:
   \usepackage[latin1]{inputenc)
lauten?

Schau mal hier:
Code:
   /**
    * 
    */
   package de.tutorials;
   
   /**
    * @author Tom
    * 
    */
   public class LatexExpressionReplacementExample {
   	/**
   	 * @param args
   	 */
   	public static void main(String[] args) {
   
   		String latexText = "\\documentclass{article}\n"
 				+ "\\usepackage{ngerman,a4wide}\n"
 				+ "\\usepackage[latin1]{inputenc}\n"
   				+ "\\begin{document}\n"
   				+ "\\section{Kapitel 1}\n"
 		 	+ "Die Programmierung in einer objektorientierten Sprache und die Speicherung\n"
 		 	+ "der Daten in einer relationalen Datenbank sind heutzutage ein gaengiges\n"
 		 	+ "Szenario. Sollen Objekte in die Datenbank geschrieben werden bzw. aus der\n"
 		 	+ "Datenbank gelesen werden, sind umfangreiche Konvertierungsoperationen\n"
 				+ "objektorientiert relational notwendig.\n"
   				+ "\\section{Kapitel 2}\n"
 		 	+ "Greifen mehrere Programmroutinen auf den gleichen Datenbestand zu, so kann\n"
 		 	+ "man statt dem mehrmaligen Ausfuehren einer Datenbank-Query den Kerngedanken\n"
 		 	+ "des Prototype-Pattern einsetzen. Hierbei wird der notwendige Datenbestand\n"
 		 	+ "nur lediglich einmal physisch aus der Datenbank ausgelesen und bei spaeterer\n"
 		 	+ "Verwendung geklont. Der Prototyp verhaelt sich somit wie eine Art Cache.\n"
   				+ "\\end{document}";
   
   		System.out.println(latexText);
   
   		System.out.println("------------------------------");
   
   		String cleanedLatexText = latexText.replaceAll(
   		        "\\\\(documentclass|usepackage|begin|end)(\\[.*\\])?\\{.*\\}",
   				"");
   
   		System.out.println(cleanedLatexText);
   
   	}
   }

Gruß Tom
 
hi tom,

vielen dank zunächst. das ist prinzipiell richtig nur mit "die sections sollen erhalten bleiben" meinte ich, dass nicht der text "section" erhalten bleibt, sondern der text innerhalb der {} - klammern. rauskommen soll folgendes.

Code:
Kapitel 1
Die Programmierung in einer objektorientierten Sprache und die Speicherung
der Daten in einer relationalen Datenbank sind heutzutage ein gaengiges
Szenario. Sollen Objekte in die Datenbank geschrieben werden bzw. aus der
Datenbank gelesen werden, sind umfangreiche Konvertierungsoperationen
objektorientiert relational notwendig.

Kapitel 2
Greifen mehrere Programmroutinen auf den gleichen Datenbestand zu, so kann
man statt dem mehrmaligen Ausfuehren einer Datenbank-Query den Kerngedanken
des Prototype-Pattern einsetzen. Hierbei wird der notwendige Datenbestand
nur lediglich einmal physisch aus der Datenbank ausgelesen und bei spaeterer
Verwendung geklont. Der Prototyp verhaelt sich somit wie eine Art Cache.
 
Hallo!

Dann schau doch mal hier: ;-')

Code:
 /**
  * 
  */
 package de.tutorials;
 
 /**
  * @author Tom
  * 
  */
 public class LatexExpressionReplacementExample {
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 
 		String latexText = "\\documentclass{article}\n"
 				+ "\\usepackage{ngerman,a4wide}\n"
 				+ "\\usepackage[latin1]{inputenc}\n"
 				+ "\\begin{document}\n"
 				+ "\\section{Kapitel 1}\n"
 		    	+ "Die Programmierung in einer objektorientierten Sprache und die Speicherung\n"
 		    	+ "der Daten in einer relationalen Datenbank sind heutzutage ein gaengiges\n"
 		    	+ "Szenario. Sollen Objekte in die Datenbank geschrieben werden bzw. aus der\n"
 		    	+ "Datenbank gelesen werden, sind umfangreiche Konvertierungsoperationen\n"
 				+ "objektorientiert relational notwendig.\n"
 				+ "\\section{Kapitel 2}\n"
 		    	+ "Greifen mehrere Programmroutinen auf den gleichen Datenbestand zu, so kann\n"
 		    	+ "man statt dem mehrmaligen Ausfuehren einer Datenbank-Query den Kerngedanken\n"
 		    	+ "des Prototype-Pattern einsetzen. Hierbei wird der notwendige Datenbestand\n"
 		    	+ "nur lediglich einmal physisch aus der Datenbank ausgelesen und bei spaeterer\n"
 		    	+ "Verwendung geklont. Der Prototyp verhaelt sich somit wie eine Art Cache.\n"
 				+ "\\end{document}";
 
 		System.out.println(latexText);
 
 		System.out.println("------------------------------");
 
 		String cleanedLatexText = latexText
 				.replaceAll(
 		    		    "(\\\\(documentclass|usepackage|begin|end)(\\[.*\\])?\\{.*\\})|(\\\\section\\{(.*)\\})",
 						"$5");
 
 		System.out.println(cleanedLatexText);
 
 	}
 }

Gruß Tom
 
Zurück