Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Doppelte Leerzeichen (in pdf) finden

782 views
Skip to first unread message

Harald Harders

unread,
Apr 2, 2003, 11:37:25 AM4/2/03
to
Moin moin,

im Moment befinde ich mich in der Endkontrolle eines 450-Seiten-Werks,
das ich zusammen mit einem Kollegen erstellt habe. Leider musste ich
feststellen, dass er hin und wieder doppelte Leerzeichen verursacht
(z. B. je eines vor und hinter mehreren aufeinander folgenden
Index-Befehlen). Da das Dokument schon recht lang ist, suche ich nun
nach einer automatischen Möglichkeit, diese doppelten Leerzeichen
zu finden.
Ich denke, im Quelltext ist dies fast unmöglich, weil es einfach
zu viele Möglichkeiten gibt:
a \index{a}\index{b} b
a\ ~b
a~\ b
a~ b
a ~b
und dann noch die ganzen Dinge mit einem Zeilenumbruch dazwischen.
Dann dachte ich, das mache ich ganz schlau in acroread (wir nutzen
pdflatex, so dass wir eine pdf-Datei als Ausgabe haben). Aber der
weiß natürlich nichts von der Anzahl der Leerzeichen zwischen den
Wörtern (woher auch?).
Hat jemand eine Idee, wie ich die Leerzeichen suchen kann?

Viele Grüße
Harald

--
Harald Harders Langer Kamp 8
Institut für Werkstoffe D-38106 Braunschweig
Technische Universität Braunschweig Germany
E-Mail: h.ha...@tu-bs.de Tel: +49 (5 31) 3 91-3062
WWW : http://www.tu-bs.de/institute/ifw/ Fax: +49 (5 31) 3 91-3058

Message has been deleted

Jens Pruefer

unread,
Apr 2, 2003, 8:32:09 PM4/2/03
to
Harald Harders wrote:

> Moin moin,
>
> im Moment befinde ich mich in der Endkontrolle eines 450-Seiten-Werks,
> das ich zusammen mit einem Kollegen erstellt habe. Leider musste ich
> feststellen, dass er hin und wieder doppelte Leerzeichen verursacht
> (z. B. je eines vor und hinter mehreren aufeinander folgenden
> Index-Befehlen). Da das Dokument schon recht lang ist, suche ich nun
> nach einer automatischen Möglichkeit, diese doppelten Leerzeichen
> zu finden.

Hallo,

wenn Du ein Unixartiges Betriebssystem hast, dann würde ich mit sed an den
Quellcode herangehen. Das setzt allerdings ein wenig Wissen zu regular
expressions voraus. Anleitung hier:

http://www.gnu.org/manual/sed/html_mono/sed.html

Gruß

Fritze

Uwe Ziegenhagen

unread,
Apr 3, 2003, 12:46:39 AM4/3/03
to Jens Pruefer

Mit Cygwin läuft sed auch unter windows.

Uwe

Harald Harders

unread,
Apr 3, 2003, 2:28:37 AM4/3/03
to
On Thu, 03 Apr 2003 03:32:09 +0200, Jens Pruefer wrote:
> Harald Harders wrote:
>> im Moment befinde ich mich in der Endkontrolle eines 450-Seiten-Werks,
>> das ich zusammen mit einem Kollegen erstellt habe. Leider musste ich
>> feststellen, dass er hin und wieder doppelte Leerzeichen verursacht
>> (z. B. je eines vor und hinter mehreren aufeinander folgenden
>> Index-Befehlen). Da das Dokument schon recht lang ist, suche ich nun
>> nach einer automatischen Möglichkeit, diese doppelten Leerzeichen
>> zu finden.

> wenn Du ein Unixartiges Betriebssystem hast, dann würde ich mit sed an den

> Quellcode herangehen. Das setzt allerdings ein wenig Wissen zu regular
> expressions voraus.

Daran hatte ich auch schon gedacht, habe es aber dann verworfen,
weil einfach zu viele Möglichkeiten bestehen, doppelte Leerzeichen
einzubauen. Oft sind die Indexeinträge nämlich über mehrere Zeilen
verstreut, und bei der Vielfalt sind meine sed-Kenntnisse dann
doch am Ende.

Trotzdem danke für den Tipp.

Gruß

Daniel Seuthe

unread,
Apr 2, 2003, 3:43:08 PM4/2/03
to
Harald Harders schrieb im Artikel <slrnb8m4e5.3...@pc52.ifw.ing.tu-bs.de>:

> Ich denke, im Quelltext ist dies fast unmöglich, weil es einfach
> zu viele Möglichkeiten gibt:
> a \index{a}\index{b} b
> a\ ~b
> a~\ b
> a~ b
> a ~b

Warum soll das nicht im Quelltext gehen?! Zumindest die letzen vier
Beispiele lassen sich leicht in einem Texteditor (z. B. »vi«) suchen und
ersetzen.

Daniel

Harald Harders

unread,
Apr 3, 2003, 4:32:22 AM4/3/03
to

Weil überall auch Zeilenumbrüche usw. dazwischen kommen können. Und
dann kann das ganze auch noch in Kombination mit den Index-Befehlen
auftreten (natürlich habe ich die einfachen Fälle schon im Editor
bzw. mit grep/sed überprüft).

Gruße

Christian Schlauer

unread,
Apr 3, 2003, 5:19:02 AM4/3/03
to
Harald Harders <h.ha...@tu-bs.de> writes:

[...]

> Weil überall auch Zeilenumbrüche usw. dazwischen kommen können. Und
> dann kann das ganze auch noch in Kombination mit den Index-Befehlen
> auftreten (natürlich habe ich die einfachen Fälle schon im Editor
> bzw. mit grep/sed überprüft).

Vielleicht kann Dir lacheck helfen? Ich habe es nur einmal benutzt,
aber WIMRE findet es solche Sachen wie figure \ref{blah} und schlägt
stattdessen figure~\ref{blah} vor...

--
Christian Schlauer

Torsten Bronger

unread,
Apr 3, 2003, 5:41:24 AM4/3/03
to
Halloechen!

Harald Harders <h.ha...@tu-bs.de> writes:

> On Wed, 2 Apr 2003 22:43:08 +0200, Daniel Seuthe wrote:
>> Harald Harders schrieb im Artikel <slrnb8m4e5.3...@pc52.ifw.ing.tu-bs.de>:
>>> Ich denke, im Quelltext ist dies fast unmöglich, weil es einfach
>>> zu viele Möglichkeiten gibt:
>>> a \index{a}\index{b} b
>>> a\ ~b
>>> a~\ b
>>> a~ b
>>> a ~b
>>
>> Warum soll das nicht im Quelltext gehen?! Zumindest die letzen vier
>> Beispiele lassen sich leicht in einem Texteditor (z. B. »vi«) suchen und
>> ersetzen.
>
> Weil überall auch Zeilenumbrüche usw. dazwischen kommen können. Und
> dann kann das ganze auch noch in Kombination mit den Index-Befehlen
> auftreten (natürlich habe ich die einfachen Fälle schon im Editor
> bzw. mit grep/sed überprüft).

Aber regulaere Ausdruecke muessten das doch schaffen. [ \n\t]+ ist
einfach allgemeiner Whitespace. Das folgende wird, wie ich mich
kenne, natuerlich nicht funktionieren, aber von
Fluechtigkeitsfehlern abgesehen kann man z.B. so deinen ersten Fall
abarbeiten: \([ \n\t]+\(?\\index{[^}]*}\)+\)[ \n\t]+ --> \1
(Vielleicht gehen einige Zeilenumbrueche zum Teufel; wird aber LaTeX
nicht stoeren.)

Eine Methode mit eventuell hohen Fixkosten aber dann
vollautomatisch, wird es bestimmt nicht geben, du wirst also den
Quelltext durchgehen muessen. Und du wirst auch nie garantieren
koennen, alle Fehler gefunden zu haben. Kann man sowieso nicht.

Editoren mit guten eingebauten Ersetzungsfunktionen mit regulaeren
Audruecken sind da natuerlich Gold wert.

Tschoe,
Torsten.

Harald Harders

unread,
Apr 3, 2003, 6:11:11 AM4/3/03
to

Leider findet es solche Dinge mit \index nicht, ist aber dennoch sehr
interessant. Danke.

Gruß

Harald Harders

unread,
Apr 3, 2003, 6:13:51 AM4/3/03
to
On Thu, 03 Apr 2003 12:41:24 +0200, Torsten Bronger wrote:

>>>> Ich denke, im Quelltext ist dies fast unmöglich, weil es einfach
>>>> zu viele Möglichkeiten gibt:
>>>> a \index{a}\index{b} b
>>>> a\ ~b
>>>> a~\ b
>>>> a~ b
>>>> a ~b

> Aber regulaere Ausdruecke muessten das doch schaffen. [ \n\t]+ ist


> einfach allgemeiner Whitespace. Das folgende wird, wie ich mich
> kenne, natuerlich nicht funktionieren, aber von
> Fluechtigkeitsfehlern abgesehen kann man z.B. so deinen ersten Fall
> abarbeiten: \([ \n\t]+\(?\\index{[^}]*}\)+\)[ \n\t]+ --> \1
> (Vielleicht gehen einige Zeilenumbrueche zum Teufel; wird aber LaTeX
> nicht stoeren.)

Was das Skript aber wohl nicht erkennt, sind durch % maskierte
Zeilenumbrüche. Gibt es da auch noch eine Möglichkeit? Das ist jetzt
nur noch interessehalber. Ich habe eingesehen, dass es wohl keine
vernünftige Möglichkeit gibt, die Stellen automatisch zu finden.

Gruß

Torsten Bronger

unread,
Apr 3, 2003, 6:40:37 AM4/3/03
to
Halloechen!

Harald Harders <h.ha...@tu-bs.de> writes:

> On Thu, 03 Apr 2003 12:41:24 +0200, Torsten Bronger wrote:
>
>>>>> Ich denke, im Quelltext ist dies fast unmöglich, weil es einfach
>>>>> zu viele Möglichkeiten gibt:
>>>>> a \index{a}\index{b} b
>>>>> a\ ~b
>>>>> a~\ b
>>>>> a~ b
>>>>> a ~b
>
>> Aber regulaere Ausdruecke muessten das doch schaffen. [ \n\t]+ ist
>> einfach allgemeiner Whitespace. Das folgende wird, wie ich mich
>> kenne, natuerlich nicht funktionieren, aber von
>> Fluechtigkeitsfehlern abgesehen kann man z.B. so deinen ersten Fall
>> abarbeiten: \([ \n\t]+\(?\\index{[^}]*}\)+\)[ \n\t]+ --> \1
>> (Vielleicht gehen einige Zeilenumbrueche zum Teufel; wird aber LaTeX
>> nicht stoeren.)
>
> Was das Skript aber wohl nicht erkennt, sind durch % maskierte
> Zeilenumbrüche. Gibt es da auch noch eine Möglichkeit?

Sowas wie \([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)
koennte es sein. (Du siehst, den Doppelpunkt hatte ich schon
vergessen.)

> Das ist jetzt nur noch interessehalber. Ich habe eingesehen, dass
> es wohl keine vernünftige Möglichkeit gibt, die Stellen
> automatisch zu finden.

*Vollautomatisch* nicht, aber ich habe auch schon aehnliche Arbeiten
machen muessen, und bin dabei den Text durchgegangen. Bei jedem
Fehler habe ich mir ein Muster ausgedacht, und habe dann mit Regexps
eine ganze Reihe aehnlicher Stellen korrigiert. Dann wieder zurueck
zum Ausgangspunkt und weiter im Text ...

Mal Hand auf's Herz, die *Zeit* ist doch weniger das Problem,
sondern die Nerven. Und alle paar Sekunden einer Regexp bei der
Arbeit zuzuschauen haelt bei Laune. ;-)

Tschoe,
Torsten.

--
Torsten Bronger, Aquisgranum, Old Europe

Harald Harders

unread,
Apr 3, 2003, 10:05:04 AM4/3/03
to
On Thu, 03 Apr 2003 13:40:37 +0200, Torsten Bronger wrote:

>> Was das Skript aber wohl nicht erkennt, sind durch % maskierte
>> Zeilenumbrüche. Gibt es da auch noch eine Möglichkeit?
>
> Sowas wie \([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)
> koennte es sein. (Du siehst, den Doppelpunkt hatte ich schon
> vergessen.)

So, mal sehen, ob ich das Ding ganz verstehe:

\([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)

\(...\) speicher alles dazwischen in \1
[ \n\t] Irgendein Leerzeichen, Tab oder CR
+\(?: ??
\\index{[^}]*} such mir einen Indexbefehl heraus und finde nicht, was
mich jedesmal wundert, nicht das letzte, sondern das
erste Auftreten von } als Ende des Strings
+\)\(?:... s.o.: ??

Ich glaube, ich muss mich mal zwei Tage mit sed einsperren und etwas
üben.

> Mal Hand auf's Herz, die *Zeit* ist doch weniger das Problem,
> sondern die Nerven. Und alle paar Sekunden einer Regexp bei der
> Arbeit zuzuschauen haelt bei Laune. ;-)

Ich glaube, Du hast es vollständig erfasst. Das C-S, das ich etwa
tausend Mal im emacs gedrückt habe, um zum nächsten \index zu springen,
hat gar nicht so lange gedauert, aber meine Birne ist so was von weich
jetzt...

Torsten Bronger

unread,
Apr 3, 2003, 11:04:49 AM4/3/03
to
Halloechen!

Harald Harders <h.ha...@tu-bs.de> writes:

> On Thu, 03 Apr 2003 13:40:37 +0200, Torsten Bronger wrote:
>
>>> Was das Skript aber wohl nicht erkennt, sind durch % maskierte
>>> Zeilenumbrüche. Gibt es da auch noch eine Möglichkeit?
>>
>> Sowas wie \([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)
>> koennte es sein. (Du siehst, den Doppelpunkt hatte ich schon
>> vergessen.)
>
> So, mal sehen, ob ich das Ding ganz verstehe:
>
> \([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)
>
> \(...\) speicher alles dazwischen in \1
> [ \n\t] Irgendein Leerzeichen, Tab oder CR
> +\(?: ??

Das "+" gehoert noch zum vorherigen und bedeutet "mindestens
einmal". "?:" bedeutet, dass diese \(...\) nicht in einem \1 (oder
mit einer anderen Nummer) gespeichert werden soll. Ich weiss
uebrigens nicht, ob sed das versteht; das ist auf jeden Fall fuer
den Emacs verstaendlich.

> +


> \\index{[^}]*} such mir einen Indexbefehl heraus und finde nicht, was
> mich jedesmal wundert, nicht das letzte, sondern das
> erste Auftreten von } als Ende des Strings

Richtig. Wenn in {...} eine zweite Klammerung ist, versagt das
Matching. Das war mir auch bewusst, bloss wird man ohnehin das
Ersetungsprogramm nicht ohne jede Kontolle auf den Text loslassen
und weiteres Markup in \index ist -- zumindest bei mir -- selten.
Die { abzaehlen und so die Schachtelung beachten geht, glaube ich,
mit sed, aber nicht mit dem Emacs. Es geht auf jeden Fall mit Flex.

> +\)\(?:... s.o.: ??
>
> Ich glaube, ich muss mich mal zwei Tage mit sed einsperren und etwas
> üben.

Ich weiss nicht, ob sed und Emacs genau dieselbe Syntax haben.
Besser ist es, sich auf die Emacs-Dokumentation zu beziehen.

Reiner Steib

unread,
Apr 3, 2003, 11:21:04 AM4/3/03
to
On Thu, Apr 03 2003, Harald Harders wrote:

> On Thu, 03 Apr 2003 13:40:37 +0200, Torsten Bronger wrote:

[...]


>> Sowas wie \([ \n\t]+\(?:\\index{[^}]*}\)+\)\(?:[ \n\t]+\|%[\t ]*\n\)

[...]
> +\(?: ??

,----[ (Info-goto-node "(emacs)Regexps"); <== Press C-x C-e here! ]
| `\(?: ... \)'
| specifies a "shy" group that does not record the matched substring;
| you can't refer back to it with `\D'. This is useful in
| mechanically combining regular expressions, so that you can add
| groups for syntactic purposes without interfering with the
| numbering of the groups that were written by the user.
`----

Gruß, Reiner.
--
,,,
(o o)
---ooO-(_)-Ooo--- PGP key available via WWW http://rsteib.home.pages.de/

0 new messages