Anzeige:
Ergebnis 1 bis 15 von 15

Thema: \% umdefinieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712

    \% umdefinieren

    Hi,

    Ich hab ein kleines "Problem":

    Normalerweise schreibe ich " 2~\%" um "2 %" zu erhalten.
    Allerdings sieht es nicht besonders hübsch aus, wenn der Abstand zwischen der Zahl und dem Prozentzeichen gleich groß ist, wie zwischen zwei Wörtern.
    Ich würde jetzt gerne den Befehl "\%" so umdefinieren, dass wenn ich "2~\%" schreibe als Ergebnis ein kleinerer Abstand zwischen "2" und "%" resultiert, also quasi "2\,\%". Diese Möglichkeit will ich nicht, da das 1) lästig zum Schreiben ist 2) die Gefahr eines Zeilenumbruchs zwischen der 2 und dem % besteht und 3) ich der Meinung bin, dass das doch auch eleganter gehen muss (Hang zum Perfektionismus )

    Ich habe jetzt folgendes versucht:
    \providecommand{\%}{\hspace{-0.5ex}\% }
    Das hätte den Vorteil, dass ich nach wie vor den alten Befehl \% nutzen kann (auch in früheren Dokumenten) und ich mit ~ dem Zeilenunterbruch unterbinden kann und trotzdem der Abstand zwischen "2 %" verkleinert wird.
    Leider tuts nicht so wie ichs mit gedacht hab, der Compiler ist da überhaupt nicht mit einverstanden

    Hat von euch jemand eine Idee? Wär euch echt dankbar.

    Grüße,
    Xenara

  2. #2
    Registrierter Benutzer Avatar von countbela666
    Registriert seit
    15.04.2005
    Ort
    Berlin
    Beiträge
    2.317
    Hallöchen Xenara,

    das ganze funktioniert nicht, weil du den Befehl, den du neu definierst, in der Definition verwendest. Das ergibt eine nette Rekursion, die dummerweise nicht terminiert, woraufhin TeX mit seinem Äquivalent eines Stacküberlaufs antwortet. Das ganze kannst du umgehen, indem du in der Definition das vordefinierte Makro durch den Aufruf des Prozentsymbols des aktuellen Fonts ersetzt, also etwa so:
    Code:
    \renewcommand{\%}{\hspace{-.5ex}\symbol{37}}
    Btw.: providecommand funzt hier nicht.

    Grüße,
    Marcel
    Geändert von countbela666 (11-09-2005 um 12:38 Uhr)

    Listen to me children of the night, beyond the doors of darkness you will find
    a thousand worlds for you to see here, take my hand and follow me...

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Super, vielen vielen Dank.
    Hatte schon so ne Ahnung, wieso es nicht geht, das \symbol{37} hat mir gefehlt. Hatte es mit renewcommand schon probiert, da gings (logischerweise) auch nicht.

    Wo liegt eigentlich der Unterschied zwischen providecommand und (re)newcommand?
    Hab da bei mir noch das drin
    \providecommand{\bt}{\begin{tabular}{ll}}
    % \bt für Beginn 2-spaltige Tabelle
    und das tut nur mit providecommand. Hat das was mit der Tabellenumgebung zu tun?

  4. #4
    Registrierter Benutzer Avatar von countbela666
    Registriert seit
    15.04.2005
    Ort
    Berlin
    Beiträge
    2.317
    Zitat Zitat von Xenara
    Wo liegt eigentlich der Unterschied zwischen providecommand und (re)newcommand?
    Der Befehl providecommand vereint newcommand und renewcommand in sich, indem er prüft, ob der neue Befehl schon existiert. Ist das der Fall, wird er umdefiniert, andernfalls neu angelegt. Eigentlich sollte man deswegen mit providecommand nichts falsch machen können, warum es in dem Fall nicht klappt, weiß ich nicht genau. Vielleicht weil \% nicht als wirklicher Befehl, den providecommand "finden" kann, existiert, sondern bloß als Escape-Sequenz/Maskierung.

    Grüße,
    Marcel

    Listen to me children of the night, beyond the doors of darkness you will find
    a thousand worlds for you to see here, take my hand and follow me...

  5. #5
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Ok, danke.

    Hab nur jetzt leider festgestellt, dass ich mir ein neues Problem geschaffen hab, weil ich öfters grad in Formeln nur das % brauch, also z.B.
    F [%] = m [g] * 100
    Da siehts natürlich blöd aus, wenn da auch noch ein Abstand davor ist.

    Gibts da ne Möglichkeit zu definieren, dass wenn man "Zahl~\%" schreibt, dass dann der Abstand automatisch kleiner ist? Also dass das geht, ohne einen neuen Befehl zu definieren?
    Oder kann man die ~ für das geschützte Leerzeichen "verkleinern"? Wär praktisch, weil ich dauernd auch Formeln und Einheiten und so hab, da wär der kleinere Abstand ja auch nicht verkehrt.

  6. #6
    Registrierter Benutzer Avatar von countbela666
    Registriert seit
    15.04.2005
    Ort
    Berlin
    Beiträge
    2.317
    Zitat Zitat von Xenara
    Hab nur jetzt leider festgestellt, dass ich mir ein neues Problem geschaffen hab, weil ich öfters grad in Formeln nur das % brauch
    Dann nimm für diese Fälle doch wieder \symbol{37}, dann hast du keinen Ärger mit weiteren neuen Befehlen.

    Grüße,
    Marcel

    Listen to me children of the night, beyond the doors of darkness you will find
    a thousand worlds for you to see here, take my hand and follow me...

  7. #7
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Hab ich auch schon überlegt, ist mir aber ehlich gesagt zu aufwändig und wird im Quellcode etwas übersichtlich.
    Ich hab in fast jedem zweiten Satz ein %, da hätt ich es gern so einfach wie möglich.

    Hast du eine Idee, wie ich das mit dem geschützen Leerzeichen hinkriegen kann? Dass die Tilde kein ganz normales Leerzeichen ist, sonder bloss ein halbes?

    Oder kann man eine Datei einrichten, in der drinsteht
    "Wenn im Quelltext 5 \% steht, dann darf zwischen 5 und \% nicht umgebrochen werden und der Abstand beträgt 0.5 ex"
    Wär auch ganz hübsch für 2 m oder 49 kg oder solche Einheiten.

  8. #8
    Registrierter Benutzer Avatar von chris3344
    Registriert seit
    22.04.2005
    Beiträge
    138
    Hallo...

    Ich finde, dass Ihr (bzw. Du) nur ein Problem mit den Variablen habt!!!

    Sag doch einfach das \% für NORMAL also [%]
    und
    \xyz für ~\symbol{37} 5 %

    Gruß,

    Christoph
    Überlegenheit zeigt man nicht, Überlegen ist man!
    ____________________________________
    Man kann einen Garten nicht düngen, indem man durch den Zaun furzt.
    Marcel Reich-Ranicki (deut. Literaturkritiker geb. 1920)

  9. #9
    Registrierter Benutzer Avatar von countbela666
    Registriert seit
    15.04.2005
    Ort
    Berlin
    Beiträge
    2.317
    Hi Xenara,
    Zitat Zitat von Xenara
    Oder kann man eine Datei einrichten, in der drinsteht
    "Wenn im Quelltext 5 \% steht, dann darf zwischen 5 und \% nicht umgebrochen werden und der Abstand beträgt 0.5 ex"
    Wär auch ganz hübsch für 2 m oder 49 kg oder solche Einheiten.
    Hmm, du könntest dir ein Shellskript schreiben, was diese Konvertierungen übernimmt, also je nachdem ob du unter Linux
    Code:
    #!usr/bin/bash
    if [ -f "$1" ] ; then
       cat "$1" | sed 's/\([0-9]\) \\%/\1~\\hspace\{-\.5ex\}\\symbol\{37\}/g' > tmpfile
       cat tmpfile > "$1"
       rm -f tmpfile
    else
       echo $1 ist keine Datei
    fi
    oder unter Windows arbeitest:
    Code:
    @ECHO OFF
    SET PATH=%PATH%;C:\Programme\GnuWin32\bin
    IF NOT EXIST "%1" GOTO Nofile
    TYPE "%1" | sed "s/\([0-9]\) \\%/\1~\\hspace\{-\.5ex\}\\symbol\{37\}/g" > tmpfile
    TYPE tmpfile > "%1"
    DEL tmpfile
    GOTO End
    :Nofile
    ECHO "%1" ist keine Datei
    :End
    Die Windows Batchdatei geht davon aus, dass der Stream Editor Sed for Windows installiert ist. Das Skript kannst du dann vor dem Compilieren über den Quelltext jagen (scriptname quellcode.tex) oder z.B. unter Windows im TeXnicCenter als Postprozessor angeben (dann muss aber zweimal compiliert werden).

    Wenn du den regex für sed noch entsprechend anpasst, kannst du das dann auch für andere Einheiten vornehmen. Klingt bloß fast schon nach ein bisschen viel Aufwand...

    Grüße,
    Marcel

    Listen to me children of the night, beyond the doors of darkness you will find
    a thousand worlds for you to see here, take my hand and follow me...

  10. #10
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Uah, ja, das ist etwas komplizierter

    Hm, wie würde man denn die ~ ändern?

    Btw. arbeite mit Mac/TeXShop

  11. #11
    Registrierter Benutzer Avatar von knu
    Registriert seit
    13.04.2005
    Beiträge
    95
    Hmm.. ich denke bei Deinem Problem an das Package units
    Zed is dead!

  12. #12
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Aber mit units muss ich für jede Einheit jedesmal
    \unit[Wert]{Einheit}
    eintippen, oder?
    Das find ich ziemlich lästig.

    Ich weiß, ich stell Ansprüche, sorry
    Hab als das Problem, dass ich öfters in 3 Tagen ein 50-Seiten-Protokoll schreiben muss, und da bin ich froh um alles, was nicht noch extra Zeit kostet.

    Würds gern mal mit der "halben ~" probieren, wie müsst ich denn das definieren? Bzw. wo ist es definiert?

  13. #13
    Registrierter Benutzer
    Registriert seit
    25.11.2004
    Beiträge
    358
    Ich misch mich jetzt einfach mal unqualifiziert ein: warum nimmst du nicht einfach den kleinen Abstand \, ? Soweit ich weiß, wird nach dem auch nicht umgebrochen.

    Till

  14. #14
    Registrierter Benutzer Avatar von countbela666
    Registriert seit
    15.04.2005
    Ort
    Berlin
    Beiträge
    2.317
    Zitat Zitat von Xenara
    Würds gern mal mit der "halben ~" probieren, wie müsst ich denn das definieren? Bzw. wo ist es definiert?
    Die Tilde ist ein Makro, das auf \nobreakspace verweist, welches ein robuster Befehl ist, der wiederum normalerweise zu {\leavevmode\nobreak} expandiert, wenn er nicht durch andere Pakete verändert wird. Theoretisch könntest du also das Verhalten der "Tilde" als geschütztes Leerzeichen durch
    Code:
    \renewcommand{\nobreakspace}{\leavevmode\nobreak\hspace{.25ex}}
    ändern. Ob du so tief in den TeX-Interna rumpfuschen möchtest, musst du wissen. Auf den ersten Blick scheint es zu funktionieren, aber das Wahre ist es glaub ich nicht.

    Grüße,
    Marcel

    Listen to me children of the night, beyond the doors of darkness you will find
    a thousand worlds for you to see here, take my hand and follow me...

  15. #15
    Registrierter Benutzer
    Registriert seit
    11.09.2005
    Beiträge
    1.712
    Ok, vielen vielen Dank für eure Hilfe und eure Geduld. Hab ne Menge wieder über LaTeX gelernt

    Auf die Sache mit der ~ komm ich wieder zurück, wenn ich mein eigenes LaTeX schreib Ist wirklich etwas zu tief drin rumgewurstelt.

    Hab jetzt folgende Lösung gefunden, die zu funktionieren scheint:
    Ich schreibe wie von Till vorgeschlagen 2\,\%. Er bricht wirklich nicht um, das wusste ich nicht.
    Allerdings habe ich aus Faulheit meine Autocompletion-Funktion in TeXShop so geändert, dass ich anstatt "\," nur "#" tippen brauche d.h. ich schreib jetzt "2#\%" und es kommt raus was soll.
    ("\" geht bei mir über Alt-Shift-7, da muss ich jedesmal beide Hände von der Tastatur nehmen, das versuch ich so oft wie möglich zu vermeiden.)

Lesezeichen

Berechtigungen

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