Use of \@ doesn't match its definition.

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Use of \@ doesn't match its definition.

von Besserwisser » Do 9. Apr 2015, 10:11

u_fischer hat geschrieben:In LaTeX3 werden diese wichtigen Befehle deutlich besser versteckt.
"Versteckt" ist der richtige Ausdruckt. Wobei auch das nur durch Namenskonvention und catcode geschieht, weil eben echte Kapselung o. ä. in TeX nicht realisierbar ist. Die Einhaltung bleibt damit Sache des Anwenders, Programmierers etc.

@MoonKid: Du liest wieder zu oberflächlich. Ich hatte nicht umsonst Alternativen für @ erwähnt, die für dich eher sinnvoll wären. Eventuell wären auch Pakete wie acro oder ein schlichtes \newcommand{\meinWort}{Wort} ausreichend, um dann an entsprechender Stelle \meinWort zu verwenden. Das kommt eben sehr darauf an, was du wirklich willst.

von u_fischer » Do 9. Apr 2015, 10:00

MoonKid hat geschrieben: Wie ich diese @-Geschichte hier sinnvoll einsetzen kann, ist mir allerdings nicht klar. Habe das offensichtlich noch nicht ausreichend verstanden.
@ in einem Befehlsnamen ist ein (leichter) Schutz vor umbeabsichtigter Umdefinition. Diesen Schutz brauchst du eigentlich erst dann, wenn du Befehle schreibst, die "innere" Befehle benutzen, auf deren Verhalten du dich verlassen musst.

Es ist übrigens eines der Probleme von LaTeX, dass diverse wichtige Befehle (wie \def, \hbox, usw) zu leicht von einem normalen Benutzer verändert werden können. Auf tex.sx hat gerade jemand versucht \fi umzudefinieren -- mit ziemlich interessanten Folgen. http://tex.stackexchange.com/questions/ ... i-possible.
In LaTeX3 werden diese wichtigen Befehle deutlich besser versteckt.

von MoonKid » Do 9. Apr 2015, 03:04

Natürlich weiß ich, dass der Code so nicht funktionieren kann und auch warum. Wollte damit nur verdeutlichen, was ich mir vorstelle.

Wie ich diese @-Geschichte hier sinnvoll einsetzen kann, ist mir allerdings nicht klar. Habe das offensichtlich noch nicht ausreichend verstanden.

von Besserwisser » Mi 8. Apr 2015, 08:48

Wenn du in \myword \myword selbst umdefinierst, kann es ja wohl nicht funktionieren, danach \myword wieder mit der ursprünglichen Bedeutung zu verwenden. Du hast da irgendwie seltsame oder gar keine Vorstellungen davon, wie Makros bei TeX funktionieren. Ansonsten wurde dir oben bereits erklärt, wie das mit dem @ im Makronamen funktioniert. Du kannst natürlich stattdessen auch einen Buchstaben verwenden. Allerdings erinnert mich dein Vorgaben eher an die Variablen von scrlttr2. Mit scrletter kann man diese auch mit scrartcl (nicht jedoch mit article) verwenden.

von MoonKid » Mi 8. Apr 2015, 02:54

Funktioniert doch nicht so. ;)
% gdef.tex
\documentclass{article}
\usepackage{xltxtra}
\usepackage{polyglossia}
\setdefaultlanguage[spelling=new]{german}

\newcommand{\myword}[1]{%
    \gdef\myword{#1}}

\begin{document}
\myword{Test}
\myword

\myword{AAA}
\myword
\end{document}
Wollte hier eigentlich eine Art Platzhalter-Mechanismus haben. So wie man mit KOMA-Script \title{} auch mehrfach definieren kann und jedesmall entsprechend eine andere Titelseite ausgeben kann.

von Johannes_B » Di 7. Apr 2015, 13:05

Code mit @ ist nicht für Nutzer vorgesehen und kann intern geändert werden. Das dokumentierte Interface bleibt aber erhalten, falls es doch geändert wird, dann nur mit entsprechender Bemerkung.

Das @ ist also so eine Art Warnung, jetzt Dinge zu tun, die du (vielleicht) nicht tun solltest.

von MoonKid » Mo 6. Apr 2015, 14:54

Johannes_B hat geschrieben:Hast du dir die von Noch so einer verlinkten Inhalte durchgelesen?
Jupp. Die Antwort dort bezog sich leider nur auf technische Aspekte. Aber deine Erklärung dazu reicht mir auch. Ich muss ja nicht alles verstehen - schon gar nicht bei TeX. ;)

von Johannes_B » Mo 6. Apr 2015, 09:27

Hast du dir die von Noch so einer verlinkten Inhalte durchgelesen?

Diese Konvention besteht, dass Nutzer nicht einfach so internen Code umdefinieren, oder Paket Code abschreiben. Das ist ein Schutzmechanismus für dich.

von MoonKid » So 5. Apr 2015, 23:59

Ach ja, die Lösung: '@' einfach aus dem Code rausnehmen, dann gehts. Is auch völlig überflüssig.

von MoonKid » So 5. Apr 2015, 23:58

Johannes_B hat geschrieben:Also das ist eigentlich ein typischischer Anfängerfehler. Wenn du nicht gerade in Japan bist, solltest du um 2:00 Uhr nachts nur noch ein Feierabendbierchen trinken.
2am ist derzeit tatsächlich Arbeitszeit. Da darf ich gar nicht trinken. ;)

Und nein, das sehe ich nicht als Anfängerfehler, sondern das ist menschlich. Ich bin ein User und sollte mich nicht mit catcodes (oder wie immer das heißt) beschäftigen müssen.

Kommt davon, wenn man Paket-Code abschreibt. ;)

Wozu braucht man solche @-Teile? Ist doch nur ncoh schwerer zu lesen. Nur um es als Paketintern zu markieren?
So wie ein '_' als Namenspräfix für private Member in objektorientierten Sprachen?
Warum nimmt man nicht ein Zeichen, dass sowieso funktioniert und wo man nicht erst irgendwelche Bedeutungs-Umdefinitions-Verbiegungen machen muss? (ernst gemeinte Frage)

Nach oben