Anzeige:
Ergebnis 1 bis 5 von 5

Thema: hartes umbrechen von extrem langen Worten (Camelcase-SMS)

  1. #1
    Benks
    Gast

    hartes umbrechen von extrem langen Worten (Camelcase-SMS)

    Liebe Leute,
    ich setze momentan ein Buch, in das ich eine ganze Menge SMS einbinden möchte.
    Ich habe mir Scripte geschrieben, die aus den SMS-Dateien kurze tex-Dateien generieren in denen die einzelnen Metainfos und der SMS-Text selbst als Parameter einem Befehl übergeben werden.

    So eine sms.tex sieht dann so aus:

    Code:
    \sms{2010}{01}{26}{07}{17}{14}{an}{Alice}{DiesIstDerTextDerSMSPlatzsparendInCamelcaseOhnePunktUndKomma}
    Der Befehl \sms{} im Hauptdokument legt dann fest wie die einzelnen Daten formatiert werden sollen.

    Code:
    %\sms{#1 DAY}{#2 MONTH}{#3 YEAR}{#4 HOUR}{#5 MINUTE}{#6 SECOND}{#7 von/an}{#8 NUMBER/Name}{#9 MESSAGE}
    \newcommand{\sms}[9]{
    		\textbf{SMS #7 #8} \textsc{(#4:#5:#6)}\\
    		\texttt{#9}\\\\
    	}
    Die langen CamelcaseWorte gehen natürlich über den Rand hinaus und werden nicht umgebrochen. Natürlich könnte ich mein Script so verändern, dass Zeilenumbrüche eingefügt werden. Ich möchte aber die Formatierung von den Daten trennen und erst später in der Hauptdatei festlegen.

    Mein Frage also:
    Gibt es in LaTeX eine Möglichkeit unbekannte Worte automatisch hart nach einer vorgegebenen Anzahl von Zeichen oder sogar besser nach einer bestimmten Breite umzubrechen.

    Etwa so:
    Code:
    /magie{Hallo Alice DiesIstDerTextDerSMSPlatzsparendInCamelcaseOhnePunktUndKomma dein Bob}
    Sollte so umgebrochen werden:
    Hallo Alice DiesI
    stDerTextDerSM
    SPlatzsparendIn
    Camelcase Ohne
    PunktUndKomma
    dein Bob

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Das geht z.B. mit seqsplit. Es verschluckt allerdings Leerzeichen, die müsstest du als ~ oder \space o.ä. eingeben. Sollte die Datei utf8 kodiert sein und deine SMS irgendwelche Umlaute enthalten, musst du die Umlaute einklammern.

  3. #3
    Benks
    Gast
    Das ist schon erst mal das Eichtige. super - danke Ulrike!
    Ich habe schon alle Umlaute ß und Spanische Sonderzeichen ausgetauscht, dadurch sind eine menge SMS jetzt auch durchgekommen. Bei einigen kommt nun aber eine "weird" Fehlermeldung

    Code:
    (./SMS/2010-04-20_07.18.52.vmg.tex
    ! Missing number, treated as zero.
    
    \accent@spacefactor
    l.1 ...SMSTEXTAUSSCHNITT}
    A number should have been here; I inserted `0'.
    (If you can't figure out why I needed to see a number,
    look up `weird error' in the index to The TeXbook.)
    ! Missing number, treated as zero.
    
    }
    Weiß jemand weiter?

  4. #4
    Benks
    Gast

    Umlaute und Leerzeichen in \seqsplit

    OK es ging nicht nur um Umlaute, Sonderzeichen und Akzente sondern anscheinend auch, darum, dass als letztes Zeichen vor der letzten } meines \sms befehls kein Leerzeichen stehen durfte...

    wer irgendwann mal hierdrauf stößt, kann den mit seqsplit zu formatierenden Text unter Linux mit folgenden shellscript bereinigen:

    Code:
    #!/bin/sh
    sed -i 's/\([äöüÄÖÜ]\)/{"{\1}}/g' *.tex
    sed -i 's/Ö/O/g' *.tex
    sed -i 's/Ä/A/g' *.tex
    sed -i 's/Ü/U/g' *.tex
    sed -i 's/ö/o/g' *.tex
    sed -i 's/ä/a/g' *.tex
    sed -i 's/ü/u/g' *.tex
    sed -i 's/[ ]*}/}/g' *.tex
    sed -i 's/ /~/g' *.tex
    sed -i 's/ß/{\\ss}/g' *.tex
    sed -i 's/ñ/{\\~{n}}/g' *.tex
    sed -i "s/é/{\\\'{e}}/g" *.tex
    sed -i "s/è/{\\\`{e}}/g" *.tex
    sed -i "s/í/{\\\'{i}}/g" *.tex
    Es gibt natürlich noch andere Sonderzeichen die beachtet werden müssten
    Achtung: das script wandelt in allen tex-Dateien ALLE Sonderzeichen um. Nicht nur die in seqsplit. Das lässt sich aber leicht ummodeln...

  5. #5
    Benks
    Gast

    Wink Nokia vmg-Dateien in LaTeX einbinden und automatisch hart umbrechen

    Sollte es wirklich vorkommen, dass jemand anderes Nokia-SMS-Dateien (.vmg) in LaTeX einbinden will, ist hier mein zusammengestückelter Workflow:

    1. SMS vom Handy ziehen (Nokiasoftware)
    möglichst in einen extra Ordner dann funktionieren die folgenden scripte alle mit "*.tex")

    2. aus den .vmg die .tex erzeugen

    das folgende script "vmg2tex.sh" verarbeitet eine als Parameter übergebene vmg

    Code:
    #!/bin/sh
    FILE=$1;
    MESSAGE=$(grep -v '^BEGIN:\|^Date:\|^VERSION:\|^X-IRMC-STATUS:\|^X-IRMC-BOX:\|^X-NOK-DT:\|^X-MESSAGE-TYPE:\|^BEGIN:\|^VERSION:\|^N:\|^TEL:\|^END:' $FILE);
    NUMBER=$(grep 'TEL:[0-9|+]' $FILE | sed 's/:/ /g' | awk '{print $2;}');
    YEAR=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $2;}');
    MONTH=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $3;}');
    DAY=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $4;}');
    HOUR=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $5;}');
    MINUTE=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $6;}');
    SECOND=$(grep 'Date:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $7;}');
    FROMTO=$(grep 'X-MESSAGE-TYPE:' $FILE | sed 's/:/ /g' | sed 's/\./ /g' | awk '{print $2;}');
    
    if [ "$FROMTO" = "DELIVER" ]; then FROMTO2="von"; fi
    if [ "$FROMTO" = "SUBMIT" ]; then FROMTO2="an" ; fi;
    
    echo "\sms{$DAY}{$MONTH}{$YEAR}{$HOUR}{$MINUTE}{$SECOND}{$FROMTO2}{$NUMBER}{$MESSAGE}";
    das Script kann für alle sms gleichzeitig aufgerufen werden mit:

    Code:
    for i in $(ls -1 *.vmg); do sh vmg2tex.sh $i>$i.tex; done;
    3. Die Rufnummern können durch den Namen ausgetauscht werden mit:
    Code:
    sed -i 's/[+0-9]*171234567/Alice/g' *.tex;
    4. Die Sonderzeichen und Leerzeichen aller tex-Dateien werden für \seqsplit formatiert mit

    Code:
    sed -i 's/\([äöüÄÖÜ]\)/{"{\1}}/g' *.tex
    sed -i 's/Ö/O/g' *.tex
    sed -i 's/Ä/A/g' *.tex
    sed -i 's/Ü/U/g' *.tex
    sed -i 's/ö/o/g' *.tex
    sed -i 's/ä/a/g' *.tex
    sed -i 's/ü/u/g' *.tex
    sed -i 's/[ ]*}/}/g' *.tex
    sed -i 's/ /~/g' *.tex
    sed -i 's/ß/{\\ss}/g' *.tex
    sed -i 's/ñ/{\\~{n}}/g' *.tex
    sed -i "s/é/{\\\'{e}}/g" *.tex
    sed -i "s/è/{\\\`{e}}/g" *.tex
    sed -i "s/í/{\\\'{i}}/g" *.tex
    In der Haupt-tex-Datei können die SMS dann einfach eingebunden werden als Include

    Code:
    \input{2010-01-25_00.24.00.vmg.tex}
    Der Befehl \sms[9], der in den SMS genutzt wird, muss in der Haupt-tex-Datei definiert werden:

    Code:
    %\sms{#1 DAY}{#2 MONTH}{#3 YEAR}{#4 HOUR}{#5 MINUTE}{#6 SECOND}{#7 von/an}{#8 NUMBER/Name}{#9 MESSAGE}
    % Formatiert die einzelnen übergebenen SMS-Daten
    \newcommand{\sms}[9]{
    		\textbf{SMS #7 #8} \textsc{(#4:#5:#6)}\\
    		\texttt{\seqsplit{#9}}\\\\
    	}
    Wenn das wirklich jemandem genutzt hat, möge _/er/sie es hier posten.


    sed-Tutorialliste auf: http://wiki.ubuntuusers.de/sed

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •