Discussion:
Satzteile auskommentieren, keine Blöcke
(zu alt für eine Antwort)
Başar Alabay
2014-12-19 18:38:26 UTC
Permalink
Hallo,

also, ich scheine irgendwie auf dem Schlauch zu stehen.

Vorab, ich habe
<http://de.comp.text.tex.narkive.com/4OQKYa98/auskommentieren-vieler-zeilen>
bereits gesehen :-)

Kann man im Quelltext nicht auch einfach nur einen frei bestimmbaren
Bereich auskommentieren? Wenn ich z. B. die Verbatim-Methode
ausprobiere, dann entsteht nach dem auskommentierten Teil ein Absatz.
Ich will aber so etwas:

Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.

Soll werden:

Dies ist ein Satz, der von grünen Gürken handelt.

So daß im Quelltext das ausgeblendete bestehen bleibt:

Dies ist ein Satz, der von [gelbem Mais und] grünen Gurken handelt.

Also im Fließtext »gelbem Mais und« auskommentieren … geht das denn
nicht?!

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Heiner Richter
2014-12-19 18:47:19 UTC
Permalink
Post by Başar Alabay
Hallo,
also, ich scheine irgendwie auf dem Schlauch zu stehen.
Vorab, ich habe
<http://de.comp.text.tex.narkive.com/4OQKYa98/auskommentieren-vieler-zeilen>
bereits gesehen :-)
Kann man im Quelltext nicht auch einfach nur einen frei bestimmbaren
Bereich auskommentieren? Wenn ich z. B. die Verbatim-Methode
ausprobiere, dann entsteht nach dem auskommentierten Teil ein Absatz.
Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.
Dies ist ein Satz, der von grünen Gürken handelt.
Dies ist ein Satz, der von [gelbem Mais und] grünen Gurken handelt.
Also im Fließtext »gelbem Mais und« auskommentieren … geht das denn
nicht?!
B. Alabay
Du meinst nicht sowas?

Dies ist ein Satz, der von %gelbem Mais und
grünen Gurken handelt.
Başar Alabay
2014-12-19 19:27:18 UTC
Permalink
Post by Heiner Richter
Du meinst nicht sowas?
Dies ist ein Satz, der von %gelbem Mais und
grünen Gurken handelt.
Hm, in TeXShop wird das falsch dargestellt. Aber der Output scheint zu
stimmen. Ich muß also mit einer Zeilenschaltung ab da, wo es weitergehen
soll, explizit eine neue Zeile anfangen? Einfach einen Bereich
(aus)klammern … hätte ich jetzt eher erwartet.

Aber das scheint schon einmal eine Lösung zu sein. Danke.

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Heiner Richter
2014-12-19 20:26:36 UTC
Permalink
Post by Başar Alabay
Post by Heiner Richter
Du meinst nicht sowas?
Dies ist ein Satz, der von %gelbem Mais und
grünen Gurken handelt.
Hm, in TeXShop wird das falsch dargestellt. Aber der Output scheint zu
stimmen. Ich muß also mit einer Zeilenschaltung ab da, wo es weitergehen
soll, explizit eine neue Zeile anfangen? Einfach einen Bereich
(aus)klammern … hätte ich jetzt eher erwartet.
Aber das scheint schon einmal eine Lösung zu sein. Danke.
B. Alabay
Ich benutze die %-Zeichen zum Auskommentieren auch für mehrere Zeilen.
In TeXstudio gibt es dafür einen Auskommentieren-Befehl.
Başar Alabay
2014-12-19 21:44:45 UTC
Permalink
Post by Heiner Richter
Post by Başar Alabay
Hm, in TeXShop wird das falsch dargestellt. Aber der Output scheint zu
stimmen. Ich muß also mit einer Zeilenschaltung ab da, wo es weitergehen
soll, explizit eine neue Zeile anfangen? Einfach einen Bereich
(aus)klammern … hätte ich jetzt eher erwartet.
Aber das scheint schon einmal eine Lösung zu sein. Danke.
B. Alabay
Ich benutze die %-Zeichen zum Auskommentieren auch für mehrere Zeilen.
In TeXstudio gibt es dafür einen Auskommentieren-Befehl.
Naja, mit % kann ich auch auskommentieren, aber eben zeilenweise. Ich
wußte nicht, daß man anscheinend durch geschickte Zeilenschaltungen das
auch auf Sätze loslassen kann, die dann einfach weitergehen. Ich habe
das bisher immer blockweise wahrgenommen.

In TeXShop erscheint dann auch nicht nur die eine Zeile rot, sondern
alles im Absatz. Aber der Output stimmt. Interessant.

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Ignatios Souvatzis
2014-12-23 17:31:19 UTC
Permalink
Post by Başar Alabay
Post by Heiner Richter
Du meinst nicht sowas?
Dies ist ein Satz, der von %gelbem Mais und
grünen Gurken handelt.
Hm, in TeXShop wird das falsch dargestellt. Aber der Output scheint zu
stimmen. Ich muß also mit einer Zeilenschaltung ab da, wo es weitergehen
soll, explizit eine neue Zeile anfangen? Einfach einen Bereich
(aus)klammern ? hätte ich jetzt eher erwartet.
Das % ist die öffnende, das Zeilenende die schließende Kommentarklammer. Der
Kommentar wird wie ein Leerzeichen gewertet.

-is
Axel Berger
2014-12-24 08:17:00 UTC
Permalink
Der Kommentar wird wie ein Leerzeichen gewertet.
Nein.


\documentclass{article}
\usepackage[x-cp1252]{inputenx}
\usepackage[T1]{fontenc}
\usepackage{textcomp}

\begin{document}

Dies ist eine Zeile% ohne diesen Teil aber
mit Kommentar.

\end{document}
Ulrich D i e z
2014-12-25 18:38:58 UTC
Permalink
Post by Ignatios Souvatzis
Post by Başar Alabay
Post by Heiner Richter
Du meinst nicht sowas?
Dies ist ein Satz, der von %gelbem Mais und
grünen Gurken handelt.
Hm, in TeXShop wird das falsch dargestellt. Aber der Output scheint zu
stimmen. Ich muß also mit einer Zeilenschaltung ab da, wo es weitergehen
soll, explizit eine neue Zeile anfangen? Einfach einen Bereich
(aus)klammern ? hätte ich jetzt eher erwartet.
Das % ist die öffnende, das Zeilenende die schließende Kommentarklammer. Der
Kommentar wird wie ein Leerzeichen gewertet.
Ich denke, es schadet nicht, genauer zu erklären, wie dies wohl gemeint ist:

Das Prozentzeichen (bzw Zeichen vom catcode 14 (comment) ) ist beim
Einlesen und Tokenizen des Quelltextes ein "Signal" an den Leseapparatus,
den Rest der Zeile nicht zu tokenizen, sondern den Status auf "new line"
umzustellen und die nächste Zeile einzulesen und zu tokenizen.

Dabei stellt das Prozentzeichen auch einen Marker für das Ende eines
davor stehenden einzulesenden Namens eines Kontrollsequenz-Tokens
dar -- zB wird die Quelltext-Sequenz

\La%bla
TeX

nicht als Kontrollwort-Token" \LaTeX" getokenized sondern
als Kontrollwort-Token "\La", gefolgt vom catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".


Beim Einlesen des Namens eines Kontrollwort-Tokens wird der
Status des Leseapparates auf "skipping blanks" gestellt, sodass ein
das Ende des Namens eines Kontrollwort-Tokens anzeigendes
Leerzeichen kein Space-Token verursacht -- die Quelltext-Sequenz

\La TeX

ergibt die selbe Token-Sequenz:
Kontrollwort-Token "\La", gefolgt vom catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".


Kommentarzeichen und Leerzeichen haben also gemeinsam, dass
man sie verwenden kann, um das Ende des davorstehend
einzulesenden Namens eines Kontrollwort-Tokens zu markieren.


Allerdings gibt es auch unterschiedliches Verhalten:


Wenn Character-Token oder Kontrollsymbol-Token gelesen werden,
steht der Leseapparatus auf "mid-line (Mitten in der Zeile)".
In so einem Fall bewirkt ein Kommentarzeichen im Quelltext nicht die
Entstehung eines Space-Token, während aber ein Leerzeichen im
Quelltext die Entstehung eines Space-Token bewirkt:

Die Quelltext-Sequenz

Leer%
zeichen

ergibt die Tokensequenz
Catcode-11-Character-Token "L",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "r",
Catcode-11-Character-Token "z",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "i",
Catcode-11-Character-Token "c",
Catcode-11-Character-Token "h",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "n"
, die kein Space-Token (Character-Token mit Catcode 10 und
Character-Code 32) enthält, bzw ergibt in der Output-Datei die
Phrase "Leerzeichen" (also _ohnne_Leerzeichen), während
die Quelltext-Sequenz

Leer zeichen

die Tokensequenz
Catcode-11-Character-Token "L",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "r",
Space-Token (Character-Token mit Catcode 10 und Character-Code 32)
Catcode-11-Character-Token "z",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "i",
Catcode-11-Character-Token "c",
Catcode-11-Character-Token "h",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "n"
ergibt , die ein Space-Token enthält, bzw in der Output-Datei die
Phrase "Leer zeichen" (also _mit_Leerzeichen) ergibt.



Ulrich
Dr Eberhard Lisse
2014-12-28 14:57:27 UTC
Permalink
Der folgende Text zeigt exakt genau das, was man einem
noch-nicht-LaTeX-Benutzer zu lesen geben muss, damit das 'noch' wegfällt
:-)-O

mfg, el

On 2014-12-25 20:38 , Ulrich D i e z wrote:
[...]
Post by Ulrich D i e z
Das Prozentzeichen (bzw Zeichen vom catcode 14 (comment) ) ist
beim Einlesen und Tokenizen des Quelltextes ein "Signal" an den
Leseapparatus, den Rest der Zeile nicht zu tokenizen, sondern den
Status auf "new line" umzustellen und die nächste Zeile
einzulesen und zu tokenizen.
Dabei stellt das Prozentzeichen auch einen Marker für das Ende
eines davor stehenden einzulesenden Namens eines
Kontrollsequenz-Tokens
dar -- zB wird die Quelltext-Sequenz
\La%bla
TeX
nicht als Kontrollwort-Token" \LaTeX" getokenized sondern
als Kontrollwort-Token "\La", gefolgt vom
catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".
Beim Einlesen des Namens eines Kontrollwort-Tokens wird der Status
des Leseapparates auf "skipping blanks" gestellt, sodass ein das
Ende des Namens eines Kontrollwort-Tokens anzeigendes Leerzeichen
kein Space-Token verursacht -- die Quelltext-Sequenz
\La TeX
Kontrollwort-Token "\La", gefolgt vom catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".
Kommentarzeichen und Leerzeichen haben also gemeinsam, dass man
sie verwenden kann, um das Ende des davorstehend einzulesenden
Namens eines Kontrollwort-Tokens zu markieren.
Wenn Character-Token oder Kontrollsymbol-Token gelesen werden,
steht der Leseapparatus auf "mid-line (Mitten in der Zeile)". In
so einem Fall bewirkt ein Kommentarzeichen im Quelltext nicht die
Entstehung eines Space-Token, während aber ein Leerzeichen im
Die Quelltext-Sequenz
Leer%
zeichen
ergibt die Tokensequenz
Catcode-11-Character-Token "L",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "r",
Catcode-11-Character-Token "z",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "i",
Catcode-11-Character-Token "c",
Catcode-11-Character-Token "h",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "n"
, die kein Space-Token (Character-Token mit Catcode 10 und
Character-Code 32) enthält, bzw ergibt in der Output-Datei die
Phrase "Leerzeichen" (also _ohnne_Leerzeichen), während die
Quelltext-Sequenz
Leer zeichen
die Tokensequenz
Catcode-11-Character-Token "L",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "r",
Space-Token (Character-Token mit Catcode 10 und Character-Code 32)
Catcode-11-Character-Token "z",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "i",
Catcode-11-Character-Token "c",
Catcode-11-Character-Token "h",
Catcode-11-Character-Token "e",
Catcode-11-Character-Token "n"
ergibt , die ein Space-Token enthält, bzw in der Output-Datei
die Phrase "Leer zeichen" (also _mit_Leerzeichen) ergibt.
Ulrich
--
if you want to reply, replace nospam with my initials
Ulrich D i e z
2014-12-28 21:02:17 UTC
Permalink
Post by Dr Eberhard Lisse
Der folgende Text zeigt exakt genau das, was man einem
noch-nicht-LaTeX-Benutzer zu lesen geben muss, damit das 'noch' wegfällt
:-)-O
Also weiter in diesem Stil:

"noch-nicht-LaTeX-Benutzer" sind nicht das Zielpublikum besagten
Textes. Das dürfte offensichtlich sein.

Ich habe besagten Text in der Hoffnung geschrieben, dass er Leuten, die
schon etwas Erfahrung haben und neugierig sind, ein wenig hilft,
Wissen darüber, wie bestimmte Dinge "intern" funktionieren, zu ordnen.

Er bezieht sich auf Dinge, die im TeXbook in Dangerous-Bend- und
Double-Dangerous-Bend-Absätzen abgehandelt werden, also in einer
Kategorie von Absätzen, über die D. E. Knuth selbst sinngemäß schreibt,
um TeX lediglich benutzen zu können brauche man diese Absätze
wohl gar nicht zu lesen.

Um LaTeX nach Anleitung und Schema F _benutzen_ zu können, muss
man weitgehend gar nicht wissen, wie die Dinge "intern" funktionieren.
Ergo: Um LaTeX nach Anleitung und Schema F _benutzen_ zu können,
braucht man besagten Text nicht.

Ich habe besagten Text in der Hoffnung geschrieben, dass er Leuten hilft,
die etwas anderes tun wollen als LaTeX nach Anleitung und Schema F
zu _benutzen_, nämlich sich über "Interna" beim Verarbeiten von
Kommentarzeichen/Leerzeichen austauschen.


Kurzfassung:

Wer LaTeX _benutzen_ können will, sollte sich mit dem Gedanken
vertraut machen, dass man vorher eine Weile damit _spielen_ muss.

Wer es geschafft hat, sich mit diesem Gedanken anzufreunden,
lässt sich auch durch Texte, die von bizarren Mitspielern wie mir
stammen, nicht schocken.


Ulrich
Axel Berger
2014-12-28 21:11:00 UTC
Permalink
was man einem noch-nicht-LaTeX-Benutzer zu lesen geben muss, damit
das 'noch' wegf?ñllt
Warum? Nichts davon muß am als Anwender wissen und nach kurzer Zeit
werde wohl auch ich es vergessen haben. Aber stell' doch bei einem
kommerziellen Officeprogramm einmal eine Interessenfrage nach dem
genaueren Warum und Wie im Hintergrund. Und ein gescheites Handbuch, in
dem Techniken jenseits des "eine Überschrift ist ein Defaultabsatz, der
nachträglich auf groß und fett formatiert wurde" und "eine Einrückung
ist einmal Tab am Beginn jeder Zeile" erklärt würde, habe ich dafür
auch noch nie gesehen. Für LaTeX gibt es Dutzende, fast alle gut genug
uns einige richtig gut.
Dr Eberhard Lisse
2014-12-31 10:31:50 UTC
Permalink
In einem weiteren Posting hierzu wurde eine Kurzanleitung von 432
Zeilen angeboten.


Wir bejammern immer, dass wir LaTeX nicht weiter verbreiten können.

Klickibunti ist halt einfach, zumindestens am Anfang.

LaTeX ist eben schwierig, zumindestens am Anfang.


Ich selbst, will nach 30 Jahren LaTeX gar nicht mehr in die Tiefen
von LaTeX eindringen, ich will einfach nur mit so wenig Aufwand wie
möglich, gut aussehende Dokumente produzieren.

Und das geht mit LyX seit 15 Jahren sehr gut, und immer besser. Und
für Spezialfälle kann man ja immer noch Hand anlegen.


Ich halte übrigens das Argument, die anderen sind noch schlechter
(vereinfacht zusammengefasst :-)-O), für schwach.

mfg, el
was man einem noch-nicht-LaTeX-Benutzer zu lesen geben muss, damit
das 'noch' wegf?ñllt
Warum? Nichts davon muß am als Anwender wissen und nach kurzer
Zeit werde wohl auch ich es vergessen haben. Aber stell' doch bei
einem kommerziellen Officeprogramm einmal eine Interessenfrage
nach dem genaueren Warum und Wie im Hintergrund. Und ein
gescheites Handbuch, in dem Techniken jenseits des "eine
Überschrift ist ein Defaultabsatz, der nachträglich auf groß
und fett formatiert wurde" und "eine Einrückung ist einmal Tab am
Beginn jeder Zeile" erklärt würde, habe ich dafür auch noch nie
gesehen. Für LaTeX gibt es Dutzende, fast alle gut genug uns
einige richtig gut.
--
if you want to reply, replace nospam with my initials
Ulrich D i e z
2014-12-31 15:33:56 UTC
Permalink
Post by Dr Eberhard Lisse
In einem weiteren Posting hierzu wurde eine Kurzanleitung von 432
Zeilen angeboten.
Die "Kurzanleitung"[1] selbst hat nur ca 135 Zeilen und ist (hoffentlich)
in leicht verständlichem Deutsch geschrieben.

Danach folgen in besagtem Posting noch ca 295 Zeilen, die nicht
zur Kurzanleitung gehören, sondern
- Einleitung des Postings darstellen.
- einen Bug im alten Code erläutern und
- den _ganzen_ reparierten/gefixten _Code_ wiedergeben.
- Dinge erläutern, die für eine Kurzanleitung uninteressant sind.

--------

[1] "Kurz" in "Kurzanleitung" bezieht sich nicht auf die Kürze des
Textes, sondern auf die Zeit, die man braucht, ihn zu verstehen.

Das TeXbook würde ich nicht als Kurzanleitung bezeichnen, denn
- es zu lesen dauert lange
- um alles zu verstehen wird erwartet, es mehrmals sinnerfassend
zu lesen.


Ulrich
Christine Roemer
2015-01-02 10:28:09 UTC
Permalink
Hallo,
was man einem noch-nicht-LaTeX-Benutzer zu lesen geben muss, damit
das 'noch' wegf?ñllt
Das finde ich ehrlich gesagt Quatsch. Man muss ja
nicht lesen, was gepostet wird und
"noch-nicht-LaTeX-Benutzer" verirren sich nicht
hierher.

Ich lese gern die Ausführung von Ulrich Diez, da
sie nicht nur inhaltlich interessant sondern
sprachlich auch sehr gut formuliert sind.
Vielen Dank dafür.

Mit Gruß
Christine

Ulrike Fischer
2014-12-29 09:45:26 UTC
Permalink
Post by Ulrich D i e z
Dabei stellt das Prozentzeichen auch einen Marker für das Ende eines
davor stehenden einzulesenden Namens eines Kontrollsequenz-Tokens
dar -- zB wird die Quelltext-Sequenz
\La%bla
TeX
nicht als Kontrollwort-Token" \LaTeX" getokenized sondern
als Kontrollwort-Token "\La", gefolgt vom catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".
Wenn man aber aus irgendwelchen Gründen Kontrollsequenzen über
mehrere Zeilen schreiben will, dann kann man es mit \csname machen:

\documentclass{article}
\begin{document}
\csname La%
TeX%
\endcsname
\end{document}
--
Ulrike Fischer
http://www.troubleshooting-tex.de/
Ulrich D i e z
2014-12-30 14:22:47 UTC
Permalink
Post by Ulrike Fischer
Post by Ulrich D i e z
Dabei stellt das Prozentzeichen auch einen Marker für das Ende eines
davor stehenden einzulesenden Namens eines Kontrollsequenz-Tokens
dar -- zB wird die Quelltext-Sequenz
\La%bla
TeX
nicht als Kontrollwort-Token" \LaTeX" getokenized sondern
als Kontrollwort-Token "\La", gefolgt vom catcode-11-character-Token "T",
gefolgt vom catcode-11-character-Token "e",
gefolgt vom catcode-11-character-Token "X".
Wenn man aber aus irgendwelchen Gründen Kontrollsequenzen über
\documentclass{article}
\begin{document}
\csname La%
TeX%
\endcsname
\end{document}
Da "schreibt" man das Kontrollwort "\LaTeX" nicht, sondern man
"schreibt" andere Token aus denen das Kontrollwort "\LaTeX"
im erst nach dem Einlesen und Tokenizen stattfindenen Verlauf
der Expansion von \csname erzeugt wird.

Die genannten anderen Token sind:

Kontrollwort \csname ,
Catcode-11-Character-Token L ,
Catcode-11-Character-Token a ,
Catcode-11-Character-Token T ,
Catcode-11-Character-Token e ,
Catcode-11-Character-Token X ,
Kontrollwort \endcsname.


Ulrich
Ulrich D i e z
2014-12-20 00:21:49 UTC
Permalink
Post by Başar Alabay
Hallo,
also, ich scheine irgendwie auf dem Schlauch zu stehen.
Vorab, ich habe
<http://de.comp.text.tex.narkive.com/4OQKYa98/auskommentieren-vieler-zeilen>
bereits gesehen :-)
Kann man im Quelltext nicht auch einfach nur einen frei bestimmbaren
Bereich auskommentieren? Wenn ich z. B. die Verbatim-Methode
ausprobiere, dann entsteht nach dem auskommentierten Teil ein Absatz.
Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.
Dies ist ein Satz, der von grünen Gürken handelt.
Dies ist ein Satz, der von [gelbem Mais und] grünen Gurken handelt.
Also im Fließtext »gelbem Mais und« auskommentieren … geht das denn
nicht?!
Teile mitten in einer Quelltextzeile auskommentieren, so dass sie gar
nicht gelesen werden und keine (in späteren Schritten zu verar-
beitenden) Token gebildet werden, geht nicht.

Auskommentieren, so dass er nicht gelesen wird und keine (in späteren
Schritte zu verarbeitenden) Token gebildet werden, kann man nur den
ganzen Rest einer Quelltextzeile.

Aber ich kann einen Mechanismus anbieten, mit dem man nicht
auf Quelltextebene, also bereits beim Einlesen und Tokenizen,
Zeilenteile auskommentiert, sondern mit dem man Dinge
unter dem catcode-Régime des \verb-Befehls einlesen lassen
und die entstehenden Token entweder an \scantokens weiterreichen
oder per \@gobble "verschlucken" lassen kann.

Dieser Mechanismus sollte ähnlich funktionieren wie das
comment-Package.

Der Unterschied sollte sein:

Mit den Befehlen \includecomment bzw \excludecomment des comment-Package
definiert man Umgebungen, deren Inhalt übernommen resp. nicht übernommen
wird.

Mit den Befehlen

\MyIncludeCommentmarkerCommand{<Kontrollsequenz-Token>}

bzw

\MyExcludeCommentmarkerCommand{<Kontrollsequenz-Token>}

aus meinem Mechanismus definiert man Makros, die ein Argument gemäß
\verb-Syntax (oder mit geschweiften Klammern, wobei dann auch verschachtelte
geschweifte Klammern erlaubt sind) "verbatimisiert", d.h. mit dem
catcode-Régime des \verb-Befehls, einlesen und dieses Argument
per \scantokens ausgeben resp. per \@gobble "verschlucken".

Im Gegensatz zu \verb erlauben meine Makros Argumente, die über
mehrere Zeilen gehen.

[ Innerhalb von \scantokens wird mit \endinput gearbeitet, so dass
das letzte beim "Einleseteil" von \scantokens gemäß \endlinechar
eingefügte Endzeilenzeichen (normalerweise ^^M; ^^M wiederum
hat normalerweise CatCode 5 und wird entweder zu gar nichts
oder zu einem Leerzeichen oder zu einem \par-Token, je nach
Status des Leseapparatus) nicht ins Gewicht fällt.]

Der Mechanismus (bzw die mit ihm definierten Makros) funktioniert
(bzw funktionieren) _nicht_ innerhalb von Argumenten, die von
Makros bzw Kontrollsequenzen bzw Active Characters bzw dergleichen
verarbeitet werden, da hier die entsprechenden Quelltext-Sequenzen
bereits fürs Verarbeiten der Argumente dieser Makros / Kontrollsequenzen /
Active Characters unter normalem Catcode-Régime eingelesen und getokenized
worden sind, sod ass kein Einlesen unter \verb-Catdode-Régime mehr
stattfinden kann...

Der Mechanismus "geht davon aus", dass \endlinechar den üblichen
Wert 13 = `\^^M = ASCII-Return hat und dass \newlinechar den üblichen
Wert 10 = `\^^J hat, dass also beim Schreiben auf Terminal/Bildschirm
oder in externe Dateien beim Auftauchen von zu schreibenden Character-Token
mit Character-Code `\^^J angefangen wird, in eine neue Zeile zu schreiben.


Den Mechanismus habe ich eben in sieben Minuten spontan aus Sachen
zusammengeschustert, die ich schon früher gebastelt habe,
Ich habe ihn nicht exzessiv getestet.
Ich gebe also keinerlei Gewähr.

Im Rahmen der LPPL kann aber gerne jede/r die Sacbe _auf eigenes Risiko_
nach eigenem Gusto ausprobieren/testen/verwenden/ausschlachten/verwerfen/
was auch immer ...

Falls man unter Verwendung eines Web-Interface wie google-Groups fürs Lesen
von Usenet-Postings gerne per Copy-Paste Teile meines Codes aus diesem Posting
herauskopieren möchte, empfehle ich, dieses Posting im "Originalformat"
anzeigen zu lassen.
Solche Web-Interfaces tendieren nämlich dazu, Text, und damit leider auch
Quelltext, neu umzubrechen - in der Annahme, die Sache sähe dann hübscher
und/oder lesbarer aus.
Bei meinem Code ist aber "streckenweise" der Zeilenumbruch entscheidend und
es kann gut sein, dass er nicht mehr (korrekt) funktioniert wenn er anders
umbrochen wird.



\documentclass{article}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% June 25, 2013 / by Ulrich Diez (***@web.de) / License: LPPL.
%
% Stuff for reading arguments "verbatim":
%
% Syntax of \UDverbarg:
%
% \UDverbarg{<^^M-replacement>}{<Mandatory 1>}{<Mandatory 2>}<verbatim-Arg>
%
% yields:
%
% <Mandatory 1>{<Mandatory2>{<verbatim-Arg>}}
%
% with each character ^^M (usually=\endline-char) replaced by
% token-sequence <^^M-replacement>
%
% The Mandatory-Arguments are mandatory. If they consist of several
% tokens, they must be nested into catcode-1/2-character-pair / braces.
% If reading is necessary, they will be read under normal catcode-
% conditions.
% The verbatim-Arg is also mandatory. It will be read under
% verbatim-catcode-conditions. If its first character is a brace,
% it will be "assumed" that the argument is nested into braces.
% Otherwise it will be assumed, that the argument is delimited
% by the first character - like the argument of \verb.
%
% Empty-lines will not be ignored.
%
% By nesting calls to \UDverbarg within \UDverbarg's first
% argument, you can collect "verbatim-arguments" within its second
% argument.
%
% E.g.,
%
% \UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{<actionA>}}}% <- Mandatory 1
% {<actionB>}% <- Mandatory
% <verbatim-Arg1><verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{<actionA>}}% <- Mandatory 1
% {<actionB><verbatim-Arg1>}% <- Mandatory 2
% <verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}{<actionA>}% <- Mandatory 1
% {<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}}% <- Mandatory 2
% <verbatim-Arg3>
%
% yields:
%
% <actionA>{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% Assume <actionA> = \@firstofone -> equals:
%
% \@firstofone{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% yields:
%
% <actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}
\begingroup
\catcode`\^^M=12 %
\@firstofone{%
\endgroup%
\newcommand*\UDEndlreplace[2]{%
\romannumeral0\@UDEndlreplace{#2}#1^^M\relax{}%
}%
\newcommand\@UDEndlreplace{}%
\def\@UDEndlreplace#1#2^^M#3\relax#4#5{%
\ifx\relax#3\relax%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{ #5{#4#2}}{\@UDEndlreplace{#1}#3\relax{#4#2#1}{#5}}%
}%
}%
\newcommand\UDverbarg[3]{%
\@bsphack
\begingroup
\let\do\@makeother\dospecials
\catcode`\{=1 %
\catcode`\ =10 %
\@ifnextchar\bgroup
{\catcode`\}=2 \@UDverbarg{#1}{#2}{#3}{}}%
{\do\{\@UDverbarg{#1}{#2}{#3}}%
}%
\newcommand\@UDverbarg[4]{%
\do\ %
\catcode`\^^M=12 %
\long\def\@tempb##1#4{%
\edef\@tempb{##1}%
\@***@sanitize\@tempb
\expandafter\UDEndlreplace\expandafter{\@tempb}{#1}{\def\@tempb}%
\expandafter\@@UDverbarg\expandafter{\@tempb}{#2}{#3}%
}%
\@tempb
}%
\newcommand\@@UDverbarg[3]{%
\endgroup
\@esphack
#2{#3{#1}}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*\UDRemoveTillCharacterMarker{%
\@bsphack\UDverbarg{^^J}%
{\expandafter\@esphack\@gobble}%
{}%
}%
\newcommand\UDCallScantokens[1]{\scantokens{#1\endinput}}%
\newcommand*\UDKeepTillCharacterMarker{%
\UDverbarg{^^J}%
{\@firstofone}%
{\UDCallScantokens}%
}%
\newcommand\MyIncludeCommentmarkerCommand[1]{%
\global\let#1=\UDKeepTillCharacterMarker
}%
\newcommand\MyExcludeCommentmarkerCommand[1]{%
\global\let#1=\UDRemoveTillCharacterMarker
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatother

\MyIncludeCommentmarkerCommand{\CommentMarkerA}
%\MyExcludeCommentmarkerCommand{\CommentMarkerA}

\MyExcludeCommentmarkerCommand{\CommentMarkerB}
%\MyIncludeCommentmarkerCommand{\CommentMarkerB}


\begin{document}

Hier ein Beispiel mit \texttt{\string\verb}-Syntax:

Normaler Text A. \CommentMarkerA~Das bleibt. Das bleibt.~ Normaler Text A.
Normaler Text A. \CommentMarkerA|Das bleibt. Und der naechste Absatz
auch:

Hier ist der naechste Absatz.
Auch \texttt{\string\verb} bleibt: \verb-\TeX- Text.| Normaler Text A.
Normaler Text A. Normaler Text B. \CommentMarkerB|Das bleibt nicht.| Normaler
Text B. Normaler Text B. \CommentMarkerB|Das bleibt nicht und der naechste
Absatz auch nicht:

Hier ist der naechste Absatz.| Normaler Text B. Normaler Text B.

\bigskip

Hier ein Beispiel mit geschweifte-Klammern-Syntax:

Normaler Text A. \CommentMarkerA{Das bleibt. {Das} bleibt.} Normaler Text A.
Normaler Text A. \CommentMarkerA{Das bleibt. Und der naechste Absatz
auch:

Hier ist der naechste Absatz.
Auch \texttt{\string\verb} bleibt: \verb-\TeX- Text.} Normaler Text A.
Normaler Text A. Normaler Text B. \CommentMarkerB{Das {b{leibt}} nicht.} Normaler
Text B. Normaler Text B. \CommentMarkerB{Das {blei{bt nicht und der naechste
Abs}a}tz auch {nicht:

Hier} ist der naechste Absatz.} Normaler Text B. Normaler Text B.

\bigskip

Hier was mit und ohne Mais und mit und ohne Gurken:

\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\MyIncludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\MyIncludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\MyExcludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.

\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\MyExcludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.

\end{document}


========================================================================


Eine einfache Alternative könnte sein, zwischen dem Auskommentieren und
dem Beibehalten von Zeilenteilen an Zeilenenden hin- und herzuschalten,
indem man ein eher selten gebrauchtes Zeichen, zB ^^A verwendet und
ihm mal den catcode 14 (comment) und mal den catcode 9 (ignored)
zuweisen lässt.

Mit catcode 14 (comment) wird das Zeichen vom Leseapparatus "als Anlass
genommen", dahinterstehende Zeilenteile nicht mehr zu lesen und sich
gleich der nächsten Zeile zuzuwenden. Die besagten Zeilenteile werden
in diesem Fall also vom Leseapparatus ignoriert.

Mit catcode 9 (ignore) wird das Zeichen selbst beim Einlesen und Tokenizen
ignoriert sodass nachfolgende Zeilenteile eingelesen und getokenized
werden.

Beispiel:


\documentclass{article}
\begin{document}

\catcode`\^^A=14\relax

Der folgende Zeilenteil erscheint nicht:^^A Folgender Zeilenteil.


\catcode`\^^A=9\relax

Der folgende Zeilenteil erscheint:^^A Folgender Zeilenteil.

\end{document}



Ulrich
Başar Alabay
2014-12-20 14:36:53 UTC
Permalink
Post by Ulrich D i e z
Teile mitten in einer Quelltextzeile auskommentieren, so dass sie gar
nicht gelesen werden und keine (in späteren Schritten zu verar-
beitenden) Token gebildet werden, geht nicht.
Schade.
Post by Ulrich D i e z
Auskommentieren, so dass er nicht gelesen wird und keine (in späteren
Schritte zu verarbeitenden) Token gebildet werden, kann man nur den
ganzen Rest einer Quelltextzeile.
Daß man das nicht besser gelöst hat …
Post by Ulrich D i e z
Aber ich kann einen Mechanismus anbieten, mit dem man nicht
auf Quelltextebene, also bereits beim Einlesen und Tokenizen,
Zeilenteile auskommentiert, sondern mit dem man Dinge
unter dem catcode-Régime des \verb-Befehls einlesen lassen
und die entstehenden Token entweder an \scantokens weiterreichen
Uff … also, das ganze Folgende ist mir dann doch zu hoch gewesen :-)
Post by Ulrich D i e z
Im Rahmen der LPPL kann aber gerne jede/r die Sacbe _auf eigenes Risiko_
nach eigenem Gusto ausprobieren/testen/verwenden/ausschlachten/verwerfen/
was auch immer ...
Vielleicht solche, die mehr davon verstehen?

Auf alle Fälle vielen Dank für die Mühen!

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Ulrich D i e z
2014-12-21 12:04:29 UTC
Permalink
Post by Başar Alabay
Uff … also, das ganze Folgende ist mir dann doch zu hoch gewesen :-)
============================================================

Kurzanleitung:

============================================================

Das, was den Mechanismus ausmacht, steht zwischen
\makeatletter und \makeatother.

-----------------------------------------------------------------

Der Mechanismus bietet zwei Befehle an:

\MyIncludeCommentmarkerCommand{<Kontrollsequenz-Token>}

und

\MyExcludeCommentmarkerCommand{<Kontrollsequenz-Token>}

Mit diesen Befehlen kann man Makros definieren.

-----------------------------------------------------------------

Wenn man schreibt:

\MyIncludeCommentmarkerCommand{\foo}%

, dann wird ein Makro \foo definiert.

Dieses Makro \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.
Dieses Argument wird dann mittels des Befehls "\scantokens" ausgegeben
und dabei mit dem normalen Catcode-Régime neu getokenized.

Nach

\MyIncludeCommentmarkerCommand{\foo}%

kannst Du (-> \verb-Syntax) zB schreiben:

Bla bla \foo|Satzteil wird jetzt ausgegeben |bla bla.

oder auch (-> Argument in geschweiften Klammern):

Bla bla \foo{Satzteil wird jetzt ausgegeben }bla bla.

Das macht unter normalen catcode-Bedingungen keinen Unterschied.

Das Ergebnis wird in beiden Fällen (hoffentlich) sein:

Bla bla Satzteil wird jetzt ausgegeben bla bla.

Im Argument von \foo kannst Du auch \verb-Befehle oder verbatim-Umgebungen
oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument
von \foo auch vorkommen.


-----------------------------------------------------------------

Wenn man schreibt:

\MyExcludeCommentmarkerCommand{\foo}%

, dann wird ein Makro \foo definiert.

Dieses Makro \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.
Dieses Argument wird dann "verschluckt".

Nach

\MyExcludeCommentmarkerCommand{\foo}%

kannst Du zB schreiben:

Bla bla \foo|Satzteil wird jetzt nicht ausgegeben |bla bla.

oder auch:

Bla bla \foo{Satzteil wird jetzt nicht ausgegeben }bla bla.

Das macht unter normalen catcode-Bedingungen keinen Unterschied.

Das Ergebnis wird in beiden Fällen (hoffentlich) sein:

Bla bla bla bla.

Im Argument von \foo kannst Du auch \verb-Befehle oder verbatim-Umgebungen
oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument von
\foo auch vorkommen.

-----------------------------------------------------------------

Summa sumarum:

Mit
\MyIncludeCommentmarkerCommand{\foo}
bzw
\MyExcludeCommentmarkerCommand{\foo}

kannst Du einen Befehl \foo (um)definieren und gleichzeitig
festlegen (bzw hin- und herschalten), ob dieser Befehl sein
Argument ausgibt oder "verschluckt".

Der Befehl \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.

Deshalb kannst Du im Argument von \foo auch \verb-Befehle oder
verbatim-Umgebungen oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument
von \foo auch vorkommen.

Da \foo sein Argument mit Verbatim-Catcode-Régime einliest,
kannst Du allerdings - genau wie beim \verb-Befehl - im Argument von
\foo eine Zeile nicht mit Kommentarzeichen oder mit catcode-5-Zeichen
komplett beenden, da zum einen diese Zeichen im Verbatim-Catcode-Régime nicht
als Kommentarzeichen bzw Zeilenbeendungszeichen interpretiert
werden, und zum anderen \scantokens, welches dann beim erneuten
Tokenizen diese Zeichen wieder mit dem üblichen catcode-Régime
interpretiert, nur auf das Argument von \foo losgelassen wird, und nicht
auf das, was im Quelltext dahinter steht.

ZB wird mit

\MyIncludeCommentmarkerCommand{\foo}%
...
Bla bla \foo{Satzteil wird jetzt %ausgegeben }bla bla.

das Ergebnis sein:

Bla bla Satzteil wird jetzt bla bla.


-----------------------------------------------------------------

Mir ist übrigens eben eine Unzulänglichkeit an meinem
Mechanismus aufgefallen:

Im Falle von \MyIncludeCommentmarkerCommand wird das
verbatimisiert eingelesene Argument von \foo an \scantokens
weitergereicht.
\scantokens wiederum tut so, als ob dieses Argument unexpandiert
in eine externe Datei geschrieben und dann aus dieser Datei wieder
eingelesen würde.
Beim "Wiedereinlese-Vorgang" steht der Status des Leseapparatus
von TeX zunächst auf "Neue Zeile einlesen".
Wenn der Leseapparatus von TeX auf "Neue Zeile einlesen" steht,
werden eingelesene Leerzeichen nicht zu Space-Token, sondern
ignoriert.
Ich habe übersehen, dass man deshalb Leerzeichen, die im Argument
von \foo ganz am Anfang stehen, verliert.

Mit

\MyIncludeCommentmarkerCommand{\foo}%
...
Bla bla\foo{ Satzteil wird jetzt ausgegeben }bla bla.

wird das unschöne Ergebnis sein:

Bla blaSatzteil wird jetzt ausgegeben bla bla.

Eigentlich sollte es sein:

Bla bla Satzteil wird jetzt ausgegeben bla bla.


Hier kommt die korrigierte Fassung meines Mechanismus, bei der
dies nicht mehr der Fall ist, weil ich am Anfang des Arguments der
entsprechenden \scantokens-Anweisung die Anweisung
"\csname @firstofone\endcsname{csname @esphack\endcsname}"
hineingeflickt habe sodass
beim "Wiedereinlesevorgang" die Zeile mit
\csname @firstofone\endcsname{csname @esphack\endcsname}"
-> \@firstofone{csname @esphack\endcsname}
-> csname @esphack\endcsname
-> \@esphack
anfängt und nicht mit Leerzeichen, die womöglich ignoriert
werden würden:



\documentclass{article}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% June 25, 2013 / by Ulrich Diez (***@web.de) / License: LPPL.
%
% Stuff for reading arguments "verbatim":
%
% Syntax of \UDverbarg:
%
% \UDverbarg{<^^M-replacement>}{<Mandatory 1>}{<Mandatory 2>}<verbatim-Arg>
%
% yields:
%
% <Mandatory 1>{<Mandatory2>{<verbatim-Arg>}}
%
% with each character ^^M (usually=\endline-char) replaced by
% token-sequence <^^M-replacement>
%
% The Mandatory-Arguments are mandatory. If they consist of several
% tokens, they must be nested into catcode-1/2-character-pair / braces.
% If reading is necessary, they will be read under normal catcode-
% conditions.
% The verbatim-Arg is also mandatory. It will be read under
% verbatim-catcode-conditions. If its first character is a brace,
% it will be "assumed" that the argument is nested into braces.
% Otherwise it will be assumed, that the argument is delimited
% by the first character - like the argument of \verb.
%
% Empty-lines will not be ignored.
%
% By nesting calls to \UDverbarg within \UDverbarg's first
% argument, you can collect "verbatim-arguments" within its second
% argument.
%
% E.g.,
%
% \UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{<actionA>}}}% <- Mandatory 1
% {<actionB>}% <- Mandatory
% <verbatim-Arg1><verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{<actionA>}}% <- Mandatory 1
% {<actionB><verbatim-Arg1>}% <- Mandatory 2
% <verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}{<actionA>}% <- Mandatory 1
% {<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}}% <- Mandatory 2
% <verbatim-Arg3>
%
% yields:
%
% <actionA>{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% Assume <actionA> = \@firstofone -> equals:
%
% \@firstofone{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% yields:
%
% <actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}
\begingroup
\catcode`\^^M=12 %
\@firstofone{%
\endgroup%
\newcommand*\UDEndlreplace[2]{%
\romannumeral0\@UDEndlreplace{#2}#1^^M\relax{}%
}%
\newcommand\@UDEndlreplace{}%
\def\@UDEndlreplace#1#2^^M#3\relax#4#5{%
\ifx\relax#3\relax%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{ #5{#4#2}}{\@UDEndlreplace{#1}#3\relax{#4#2#1}{#5}}%
}%
}%
\newcommand\UDverbarg[3]{%
\@bsphack
\begingroup
\let\do\@makeother\dospecials
\catcode`\{=1 %
\catcode`\ =10 %
\@ifnextchar\bgroup
{\catcode`\}=2 \@UDverbarg{#1}{#2}{#3}{}}%
{\do\{\@UDverbarg{#1}{#2}{#3}}%
}%
\newcommand\@UDverbarg[4]{%
\do\ %
\catcode`\^^M=12 %
\long\def\@tempb##1#4{%
\edef\@tempb{##1}%
\@***@sanitize\@tempb
\expandafter\UDEndlreplace\expandafter{\@tempb}{#1}{\def\@tempb}%
\expandafter\@@UDverbarg\expandafter{\@tempb}{#2}{#3}%
}%
\@tempb
}%
\newcommand\@@UDverbarg[3]{%
\endgroup
\@esphack
#2{#3{#1}}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*\UDRemoveTillCharacterMarker{%
\@bsphack\UDverbarg{^^J}%
{\expandafter\@esphack\@gobble}%
{}%
}%
\newcommand\UDCallScantokens[1]{%
\@bsphack
\scantokens{%
\csname @firstofone\endcsname
{\csname @esphack\endcsname}%
#1%
\endinput
}%
}%
\newcommand*\UDKeepTillCharacterMarker{%
\UDverbarg{^^J}%
{\@firstofone}%
{\UDCallScantokens}%
}%
\newcommand\MyIncludeCommentmarkerCommand[1]{%
\global\let#1=\UDKeepTillCharacterMarker
}%
\newcommand\MyExcludeCommentmarkerCommand[1]{%
\global\let#1=\UDRemoveTillCharacterMarker
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatother

\MyIncludeCommentmarkerCommand{\CommentMarkerA}
%\MyExcludeCommentmarkerCommand{\CommentMarkerA}

\MyExcludeCommentmarkerCommand{\CommentMarkerB}
%\MyIncludeCommentmarkerCommand{\CommentMarkerB}


\begin{document}
Bla bla\CommentMarkerA{ Blubb% Blebb} Bla bla.

Bla bla\CommentMarkerA| Blubb% Blebb| Bla bla.

Bla bla\CommentMarkerB{ Blubb% Blebb} Bla bla.

Bla bla\CommentMarkerB| Blubb% Blebb| Bla bla.

\bigskip

Bla bla\CommentMarkerA{ Blubb Blebb} Bla bla.

Bla bla\CommentMarkerA| Blubb Blebb| Bla bla.

Bla bla\CommentMarkerB{ Blubb Blebb} Bla bla.

Bla bla\CommentMarkerB| Blubb Blebb| Bla bla.

\bigskip

Hier ein Beispiel mit \texttt{\string\verb}-Syntax:

Normaler Text A. \CommentMarkerA~Das bleibt. Das
bleibt. ~Normaler Text A. Normaler Text A. \CommentMarkerA|Das bleibt.
Und der naechste Absatz auch:

Hier ist der naechste Absatz. Auch \texttt{\string\verb}
bleibt: \verb-\TeX- Text. |Normaler Text A. Normaler Text A.
Normaler Text B. \CommentMarkerB|Das bleibt nicht. |Normaler
Text B. Normaler Text B. \CommentMarkerB|Das bleibt nicht und
der naechste Absatz auch nicht:

Hier ist der naechste Absatz. |Normaler Text B. Normaler Text B.

\bigskip

Hier ein Beispiel mit geschweifte-Klammern-Syntax:

Normaler Text A. \CommentMarkerA{Das {}{bleibt}. Das
bleibt. }Normaler Text A. Normaler Text A. \CommentMarkerA{Das bleibt.
Und der naechste Absatz auch:

Hier ist der naechste Absatz. Auch \texttt{\string\verb}
bleibt: \verb-\TeX- Text. }Normaler Text A. Normaler Text A.
Normaler Text B. \CommentMarkerB{Das bleibt nicht. }Normaler
Text B. Normaler Text B. \CommentMarkerB{Das bleibt nicht und
der naechste Absatz auch nicht:

Hier ist der naechste Absatz. }Normaler Text B. Normaler Text B.


\bigskip

Hier was mit und ohne Mais und mit und ohne Gurken:

\MyIncludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyIncludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.

\end{document}




Ulrich
Ulrich D i e z
2014-12-21 13:46:45 UTC
Permalink
[ Dieses Posting supersedet mein Posting
< news:m76d3f$k7l$***@news.albasani.net >
vom 21 Dezember 2014, 13:04:29 (MEZ) . ]
Post by Başar Alabay
Uff … also, das ganze Folgende ist mir dann doch zu hoch gewesen :-)
============================================================

Kurzanleitung:

============================================================

Das, was den Mechanismus ausmacht, steht zwischen
\makeatletter und \makeatother.

-----------------------------------------------------------------

Der Mechanismus bietet zwei Befehle an:

\MyIncludeCommentmarkerCommand{<Kontrollsequenz-Token>}

und

\MyExcludeCommentmarkerCommand{<Kontrollsequenz-Token>}

Mit diesen Befehlen kann man Makros definieren.

-----------------------------------------------------------------

Wenn man schreibt:

\MyIncludeCommentmarkerCommand{\foo}%

, dann wird ein Makro \foo definiert.

Dieses Makro \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.
Dieses Argument wird dann mittels des Befehls "\scantokens" ausgegeben
und dabei mit dem normalen Catcode-Régime neu getokenized.

Nach

\MyIncludeCommentmarkerCommand{\foo}%

kannst Du (-> \verb-Syntax) zB schreiben:

Bla bla \foo|Satzteil wird jetzt ausgegeben |bla bla.

oder auch (-> Argument in geschweiften Klammern):

Bla bla \foo{Satzteil wird jetzt ausgegeben }bla bla.

Das macht unter normalen catcode-Bedingungen keinen Unterschied.

Das Ergebnis wird in beiden Fällen (hoffentlich) sein:

Bla bla Satzteil wird jetzt ausgegeben bla bla.

Im Argument von \foo kannst Du auch \verb-Befehle oder verbatim-Umgebungen
oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument
von \foo auch vorkommen.


-----------------------------------------------------------------

Wenn man schreibt:

\MyExcludeCommentmarkerCommand{\foo}%

, dann wird ein Makro \foo definiert.

Dieses Makro \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.
Dieses Argument wird dann "verschluckt".

Nach

\MyExcludeCommentmarkerCommand{\foo}%

kannst Du zB schreiben:

Bla bla \foo|Satzteil wird jetzt nicht ausgegeben |bla bla.

oder auch:

Bla bla \foo{Satzteil wird jetzt nicht ausgegeben }bla bla.

Das macht unter normalen catcode-Bedingungen keinen Unterschied.

Das Ergebnis wird in beiden Fällen (hoffentlich) sein:

Bla bla bla bla.

Im Argument von \foo kannst Du auch \verb-Befehle oder verbatim-Umgebungen
oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument von
\foo auch vorkommen.

-----------------------------------------------------------------

Summa sumarum:

Mit
\MyIncludeCommentmarkerCommand{\foo}
bzw
\MyExcludeCommentmarkerCommand{\foo}

kannst Du einen Befehl \foo (um)definieren und gleichzeitig
festlegen (bzw hin- und herschalten), ob dieser Befehl sein
Argument ausgibt oder "verschluckt".

Der Befehl \foo schaltet temporär auf Verbatim-Catcodes um und liest
entweder nach der Syntax des \verb-Befehls ein Argument ein oder liest
ein in geschweifte Klammern eingefasstes Argument ein.

Deshalb kannst Du im Argument von \foo auch \verb-Befehle oder
verbatim-Umgebungen oder lstlisting-Umgebungen und dergleichen nutzen.
\outer-Token und Absatzumbrüche und dergleichen dürfen im Argument
von \foo auch vorkommen.

Da \foo sein Argument mit Verbatim-Catcode-Régime einliest,
kannst Du allerdings - genau wie beim \verb-Befehl - im Argument von
\foo eine Zeile nicht mit Kommentarzeichen oder mit catcode-5-Zeichen
komplett beenden, da zum einen diese Zeichen im Verbatim-Catcode-Régime nicht
als Kommentarzeichen bzw Zeilenbeendungszeichen interpretiert
werden, und zum anderen \scantokens, welches dann beim erneuten
Tokenizen diese Zeichen wieder mit dem üblichen catcode-Régime
interpretiert, nur auf das Argument von \foo losgelassen wird, und nicht
auf das, was im Quelltext dahinter steht.

ZB wird mit

\MyIncludeCommentmarkerCommand{\foo}%
...
Bla bla \foo{Satzteil wird jetzt %ausgegeben }bla bla.

das Ergebnis sein:

Bla bla Satzteil wird jetzt bla bla.


-----------------------------------------------------------------

Mir ist übrigens eben eine Unzulänglichkeit an meinem
Mechanismus aufgefallen:

Im Falle von \MyIncludeCommentmarkerCommand wird das
verbatimisiert eingelesene Argument von \foo an \scantokens
weitergereicht.
\scantokens wiederum tut so, als ob dieses Argument unexpandiert
in eine externe Datei geschrieben und dann aus dieser Datei wieder
eingelesen würde.
Beim "Wiedereinlese-Vorgang" steht der Status des Leseapparatus
von TeX zunächst auf "Neue Zeile einlesen".
Wenn der Leseapparatus von TeX auf "Neue Zeile einlesen" steht,
werden eingelesene Leerzeichen nicht zu Space-Token, sondern
ignoriert.
Ich habe übersehen, dass man deshalb Leerzeichen, die im Argument
von \foo ganz am Anfang stehen, verliert.

Mit

\MyIncludeCommentmarkerCommand{\foo}%
...
Bla bla\foo{ Satzteil wird jetzt ausgegeben }bla bla.

wird das unschöne Ergebnis sein:

Bla blaSatzteil wird jetzt ausgegeben bla bla.

Eigentlich sollte es sein:

Bla bla Satzteil wird jetzt ausgegeben bla bla.


Hier kommt die korrigierte Fassung meines Mechanismus, bei der
dies nicht mehr der Fall ist, weil ich am Anfang des Arguments der
entsprechenden \scantokens-Anweisung die Anweisung
"\csname @firstofone\endcsname{csname @esphack\endcsname}"
hineingeflickt habe sodass
beim "Wiedereinlesevorgang" die Zeile mit
\csname @firstofone\endcsname{csname @esphack\endcsname}"
-> \@firstofone{csname @esphack\endcsname}
-> csname @esphack\endcsname
-> \@esphack
anfängt und nicht mit Leerzeichen, die womöglich ignoriert
werden würden.

Ausserdem habe ich die Kommentare für die Handhabung von
\UDverbarg korrigiert.



\documentclass{article}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% June 25, 2013 / by Ulrich Diez (***@web.de) / License: LPPL.
%
% Stuff for reading arguments "verbatim":
%
% Syntax of \UDverbarg:
%
% \UDverbarg{<^^M-replacement>}{<Mandatory 1>}{<Mandatory 2>}<verbatim-Arg>
%
% yields:
%
% <Mandatory 1>{<Mandatory2>{<verbatim-Arg>}}
%
% with each character ^^M (usually=\endline-char) replaced by
% token-sequence <^^M-replacement>
%
% The Mandatory-Arguments are mandatory.
% If reading is necessary, they will be read under current/unchanged
% catcode-conditions.
% The <verbatim-Arg> is also mandatory. It will be read under
% verbatim-catcode-conditions. If its first character is a brace,
% it will be "assumed" that the argument is nested into braces.
% Otherwise it will be assumed, that the argument is delimited
% by the first character - like the argument of \verb.
%
% Empty lines will not be ignored.
%
% By nesting calls to \UDverbarg within \UDverbarg's <Mandatory-1>-
% argument, you can collect "verbatim-arguments" within the
% <Mandatory-2>-argument.
%
% E.g.,
%
% \UDverbarg{<^^M-replacement>}% <- ^^M-replacement
% {\UDverbarg{<^^M-replacement>}{\UDverbarg{<^^M-replacement>}{<actionA>}}}% <- Mandatory 1
% {<actionB>}% <- Mandatory 2
% <verbatim-Arg1><verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}% <- ^^M-replacement
% {\UDverbarg{<^^M-replacement>}{<actionA>}}% <- Mandatory 1
% {<actionB>{<verbatim-Arg1>}}% <- Mandatory 2
% <verbatim-Arg2><verbatim-Arg3>
%
% yields:
%
% \UDverbarg{<^^M-replacement>}% <- ^^M-replacement
% {<actionA>}% <- Mandatory 1
% {<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}}% <- Mandatory 2
% <verbatim-Arg3>
%
% yields:
%
% <actionA>{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% Assume <actionA> = \@firstofone -> equals:
%
% \@firstofone{<actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}}
%
% yields:
%
% <actionB>{<verbatim-Arg1>}{<verbatim-Arg2>}{<verbatim-Arg3>}
%
\begingroup
\catcode`\^^M=12 %
\@firstofone{%
\endgroup%
\newcommand*\UDEndlreplace[2]{%
\romannumeral0\@UDEndlreplace{#2}#1^^M\relax{}%
}%
\newcommand\@UDEndlreplace{}%
\def\@UDEndlreplace#1#2^^M#3\relax#4#5{%
\ifx\relax#3\relax%
\expandafter\@firstoftwo%
\else%
\expandafter\@secondoftwo%
\fi%
{ #5{#4#2}}{\@UDEndlreplace{#1}#3\relax{#4#2#1}{#5}}%
}%
}%
\newcommand\UDverbarg[3]{%
\@bsphack
\begingroup
\let\do\@makeother\dospecials
\catcode`\{=1 %
\catcode`\ =10 %
\@ifnextchar\bgroup
{\catcode`\}=2 \@UDverbarg{#1}{#2}{#3}{}}%
{\do\{\@UDverbarg{#1}{#2}{#3}}%
}%
\newcommand\@UDverbarg[4]{%
\do\ %
\catcode`\^^M=12 %
\long\def\@tempb##1#4{%
\edef\@tempb{##1}%
\@***@sanitize\@tempb
\expandafter\UDEndlreplace\expandafter{\@tempb}{#1}{\def\@tempb}%
\expandafter\@@UDverbarg\expandafter{\@tempb}{#2}{#3}%
}%
\@tempb
}%
\newcommand\@@UDverbarg[3]{%
\endgroup
\@esphack
#2{#3{#1}}%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand*\UDRemoveTillCharacterMarker{%
\@bsphack\UDverbarg{^^J}%
{\@firstoftwo{\@esphack}}%
{}%
}%
\newcommand\UDCallScantokens[1]{%
\scantokens{%
\csname @firstofone\endcsname
{\csname @esphack\endcsname}%
#1%
\endinput
}%
}%
\newcommand*\UDKeepTillCharacterMarker{%
\@bsphack\UDverbarg{^^J}%
{\@firstofone}%
{\UDCallScantokens}%
}%
\newcommand\MyIncludeCommentmarkerCommand[1]{%
\global\let#1=\UDKeepTillCharacterMarker
}%
\newcommand\MyExcludeCommentmarkerCommand[1]{%
\global\let#1=\UDRemoveTillCharacterMarker
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatother

\MyIncludeCommentmarkerCommand{\CommentMarkerA}
%\MyExcludeCommentmarkerCommand{\CommentMarkerA}

\MyExcludeCommentmarkerCommand{\CommentMarkerB}
%\MyIncludeCommentmarkerCommand{\CommentMarkerB}


\begin{document}
Bla bla\CommentMarkerA{ Blubb% Blebb} Bla bla.

Bla bla\CommentMarkerA| Blubb% Blebb| Bla bla.

Bla bla\CommentMarkerB{ Blubb% Blebb} Bla bla.

Bla bla\CommentMarkerB| Blubb% Blebb| Bla bla.

\bigskip

Bla bla\CommentMarkerA{ Blubb Blebb} Bla bla.

Bla bla\CommentMarkerA| Blubb Blebb| Bla bla.

Bla bla\CommentMarkerB{ Blubb Blebb} Bla bla.

Bla bla\CommentMarkerB| Blubb Blebb| Bla bla.

\bigskip

Hier ein Beispiel mit \texttt{\string\verb}-Syntax:

Normaler Text A. \CommentMarkerA~Das bleibt. Das
bleibt. ~Normaler Text A. Normaler Text A. \CommentMarkerA|Das bleibt.
Und der naechste Absatz auch:

Hier ist der naechste Absatz. Auch \texttt{\string\verb}
bleibt: \verb-\TeX- Text. |Normaler Text A. Normaler Text A.
Normaler Text B. \CommentMarkerB|Das bleibt nicht. |Normaler
Text B. Normaler Text B. \CommentMarkerB|Das bleibt nicht und
der naechste Absatz auch nicht:

Hier ist der naechste Absatz. |Normaler Text B. Normaler Text B.

\bigskip

Hier ein Beispiel mit geschweifte-Klammern-Syntax:

Normaler Text A. \CommentMarkerA{Das {}{bleibt}. Das
bleibt. }Normaler Text A. Normaler Text A. \CommentMarkerA{Das bleibt.
Und der naechste Absatz auch:

Hier ist der naechste Absatz. Auch \texttt{\string\verb}
bleibt: \verb-\TeX- Text. }Normaler Text A. Normaler Text A.
Normaler Text B. \CommentMarkerB{Das bleibt nicht. }Normaler
Text B. Normaler Text B. \CommentMarkerB{Das bleibt nicht und
der naechste Absatz auch nicht:

Hier ist der naechste Absatz. }Normaler Text B. Normaler Text B.


\bigskip

Hier was mit und ohne Mais und mit und ohne Gurken:

\MyIncludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyIncludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.

\end{document}




Ulrich
Herbert Voss
2014-12-20 08:18:42 UTC
Permalink
Post by Başar Alabay
Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.
Dies ist ein Satz, der von \iffalse gelbem Mais und\fi grünen Gurken
handelt.

Herbert
Dr Eberhard Lisse
2014-12-20 10:54:56 UTC
Permalink
In LyX kann man den entsprechenden Text doppelklicken und mit
Insert -> Note -> Comment den entprechenden Text markieren.

Daraus wird dann in LaTeX

Dies ist ein Satz, der von
\begin{comment}
gelbem Mais und
\end{comment}
grünen Gurken handelt.

Davon ausgehend funktioniert auch (neue Zeile vor "grünen"):

Dies ist ein Satz, der von \begin{comment}gelbem Mais und\end{comment}
grünen Gurken handelt.

Aber nicht (eine Zeile):

Dies ist ein Satz, der von \begin{comment}gelbem Mais und\end{comment}
grünen Gurken handelt.
Post by Herbert Voss
Post by Başar Alabay
Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.
Dies ist ein Satz, der von \iffalse gelbem Mais und\fi grünen Gurken
handelt.
Herbert
--
if you want to reply, replace nospam with my initials
Başar Alabay
2014-12-20 12:27:25 UTC
Permalink
Post by Başar Alabay
Dies ist ein Satz, der von
\begin{comment}
gelbem Mais und
\end{comment}
grünen Gurken handelt.
Dies ist ein Satz, der von \begin{comment}gelbem Mais und\end{comment}
grünen Gurken handelt.
Es muß also eine neue Zeile rein, so oder so.
Post by Başar Alabay
Dies ist ein Satz, der von \begin{comment}gelbem Mais und\end{comment}
grünen Gurken handelt.
Blöd eigentlich.

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Ulrich D i e z
2014-12-20 13:44:04 UTC
Permalink
Post by Başar Alabay
Post by Başar Alabay
Dies ist ein Satz, der von
\begin{comment}
gelbem Mais und
\end{comment}
grünen Gurken handelt.
Dies ist ein Satz, der von \begin{comment}gelbem Mais und\end{comment}
grünen Gurken handelt.
Es muß also eine neue Zeile rein, so oder so.
Bei dem, was ich gepostet habe, ist das nicht erforderlich.

Mein Mechanismus ist allerdings etwas kompliziert, weil ich wollte,
dass er auch mit \verb-Befehlen, verbatim- und lstlistings-Umgebungen,
unbalancierten \if..\else..\fi-Konstrukten, \outer-Token und dergleichen
zurechtkommt.

Ansonsten könntest Du einfach einargumentige Makros definieren und
mal auf \@firstofone und mal auf \@gobble setzen:


\documentclass{article}
\makeatletter
\newcommand\MyIncludeCommentmarkerCommand[1]{%
\global\let#1=\@firstofone
}%
\newcommand\MyExcludeCommentmarkerCommand[1]{%
\global\let#1=\@gobble
}%
\makeatother

\MyIncludeCommentmarkerCommand{\CommentMarkerA}
%\MyExcludeCommentmarkerCommand{\CommentMarkerA}

\MyExcludeCommentmarkerCommand{\CommentMarkerB}
%\MyIncludeCommentmarkerCommand{\CommentMarkerB}


\begin{document}
Normaler Text A. \CommentMarkerA{Das bleibt. {Das} bleibt. }%
Normaler Text A. Normaler Text A. \CommentMarkerA{Das bleibt.
Und der naechste Absatz auch:

Hier ist der naechste Absatz. }Normaler Text A. Normaler Text A.
Normaler Text B. \CommentMarkerB{Das {b{leibt}} nicht. }Normaler
Text B. Normaler Text B. \CommentMarkerB{Das {blei{bt nicht und
der naechste Abs}a}tz auch {nicht:

Hier} ist der naechste Absatz. }Normaler Text B. Normaler
Text B.

\bigskip

Hier was mit und ohne Mais und mit und ohne Gurken:

\MyIncludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyIncludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyIncludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.


\MyExcludeCommentmarkerCommand{\Mais}
\MyExcludeCommentmarkerCommand{\Gurken}
\MyExcludeCommentmarkerCommand{\MaisOderGurken}
\Mais{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}
\Gurken{\MyIncludeCommentmarkerCommand{\MaisOderGurken}}

Dies ist ein Satz%
\MaisOderGurken{, der von }\Mais{gelbem Mais }\Mais{\Gurken{und
von }}\Gurken{gruenen Gurken }\MaisOderGurken{handelt}.

\end{document}



Alternativ kannst Du vielleicht auch ein Zeichen aktiv machen
und definieren, dass es ein durch es selbst begrenztes Argument
"verschlingt":


\documentclass{article}

\catcode`\^^A=13 %
\long\def^^A#1^^A{}%
%\catcode`\^^A=9 %

% Nun kann man ^^A im "Fliesstext" _paarweise_ verwenden, um
% Dinge verschwinden zu lassen.
% Wenn man stattdessen den catcode von ^^A auf 9 = ignore
% setzt, wird ^^A ignoriert und das, was zwischen ^^A-Paaren
% steht,verschwindet nicht.
% Das alles funktioniert aber nicht innerhalb des Definitionstextes
% oder des Parametertextes von Definitionen und auch nicht innerhalb
% von Argumenten. Mit \if..\else..\fi-Nesting und mit \outer-Token
% muss man auch vorsichtig sein ...

\begin{document}

Hier ist ein ^^A(nicht) ignorierter Teil in einem ^^ASatz.

\catcode`\^^A=9 %

Hier ist ein ^^A(nicht) ignorierter Teil in einem ^^ASatz.

\end{document}





Ulrich
Josef Kleber
2014-12-20 16:36:20 UTC
Permalink
Post by Başar Alabay
Kann man im Quelltext nicht auch einfach nur einen frei bestimmbaren
Bereich auskommentieren? Wenn ich z. B. die Verbatim-Methode
ausprobiere, dann entsteht nach dem auskommentierten Teil ein Absatz.
Dies ist ein Satz, der von gelbem Mais und grünen Gurken handelt.
Dies ist ein Satz, der von grünen Gürken handelt.
Dies ist ein Satz, der von [gelbem Mais und] grünen Gurken handelt.
Also im Fließtext »gelbem Mais und« auskommentieren … geht das denn
nicht?!
Hier ein Beispiel mit PDF annotations:

\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage[color=red,author=Me,markup=StrikeOut,printSOfinal=false,%final
]{pdfcomment}
\newcommand*\delete[1]%
{%
\pdfmarkupcomment{#1}{Mit der Option final wird dieser Text gelöscht!}%
}%
\begin{document}
Dies ist ein Satz, der von \pdfmarkupcomment{gelbem Mais und
}{Kommentar}grünen Gurken handelt.

Dies ist ein Satz, der von \delete{gelbem Mais und} grünen Gurken handelt.
\end{document}

So bleibt der zu löschende Textteil sowohl im Dokumet als auch vorerst
im PDF erhalten. Wird die Option *final* einkommentiert wird der
Textteil im PDF "gelöscht"!

Wahlweise verkürzt mit \delete!

Josef
Başar Alabay
2014-12-20 22:20:19 UTC
Permalink
Hm, aber ist das nicht ein etwas merkwürdiger Umweg? Ich meinte ja eher
etwas, bei dem man ohne große Vorbereitung vorübergehen eine Textpassage
kurz ausblendet. Dafür gab es ja ein, zwei Beispiele.

Das ist ja eher PDF-Notiz, oder?

B. Alabay
--
http://www.thetrial.de/
ケディエ・ばく・ハヤテ・あんら
Josef Kleber
2014-12-21 08:03:04 UTC
Permalink
Post by Başar Alabay
Hm, aber ist das nicht ein etwas merkwürdiger Umweg? Ich meinte ja eher
etwas, bei dem man ohne große Vorbereitung vorübergehen eine Textpassage
kurz ausblendet. Dafür gab es ja ein, zwei Beispiele.
Kurz etwas auszublenden geht einfacher. Mit meiner Lösung kann man die
Historie des Dokuments (incl. Kommentar) erhalten, was beim
Bearbeiten/Korrigieren eines Dokumrents durchaus von Vorteil sein kann.

Josef
Heiner Richter
2014-12-21 11:50:08 UTC
Permalink
Post by Josef Kleber
Post by Başar Alabay
Hm, aber ist das nicht ein etwas merkwürdiger Umweg? Ich meinte ja eher
etwas, bei dem man ohne große Vorbereitung vorübergehen eine Textpassage
kurz ausblendet. Dafür gab es ja ein, zwei Beispiele.
Kurz etwas auszublenden geht einfacher. Mit meiner Lösung kann man die
Historie des Dokuments (incl. Kommentar) erhalten, was beim
Bearbeiten/Korrigieren eines Dokumrents durchaus von Vorteil sein kann.
Josef
Ich muss häufig meine juristischen Kommentierungen aktualisieren, und
dafür ist Deine Lösung (statt meiner bisher verwendeten Prozentzeichen
zum Auskommentieren veralteter Teile), denke ich, sehr komfortabel.

Gruß
Heiner
Axel Berger
2014-12-20 21:48:00 UTC
Permalink
Du hättest den Hinweis ergänzen können, daß das Paket die Dateiversion
PDF 1.7 voraussetzt und Versionen von pdflatex, die diese Version
schreiben können.
Josef Kleber
2014-12-21 10:03:00 UTC
Permalink
Post by Axel Berger
Du hättest den Hinweis ergänzen können, daß das Paket die Dateiversion
PDF 1.7 voraussetzt und Versionen von pdflatex, die diese Version
schreiben können.
Mal abgesehen, daß das mal wieder dein sehr spezielles Problem ist, ist
es inhaltlich schlicht falsch. Viele der Annotations gibt es mindestens
seit PDF 1.2. Ich habe jetzt wirklich keine Lust nachzusehen. Den PDF
Code schreibt pdfcomment selbst. pdflatex schreibt wimre schlicht und
einfach den Wert von \pdfminorversion in die Datei, ohne dabei auch nur
ansatzweise sicherzustellen, daß die Datei keine Konstrukte höherer
Versionen enthält.

Josef
Axel Berger
2014-12-21 12:33:00 UTC
Permalink
Viele der Annotations gibt es mindestens seit PDF 1.2.
Stimmt wohl, ich hatte mich seinerzeit vor allem für die schönen
Highlighting-Funktionen Deines Paketes interessiert.
ohne dabei auch nur ansatzweise sicherzustellen, daoo die Datei keine
Konstrukte h÷herer Versionen enthSigmlt.
Die Kontrolle mag nicht perfekt sein, ist aber vorhanden und ich sehe
regelmäßig entsprechende Fehlermeldungen. Im übrigen würde es nicht
viel helfen -- OS-Versionen, die kein neuestes pdflatex erlauben,
lassen auch keinen flammneuen Reader zu.
Meine eigenen PDF haben meist Version 1.2 und werden regelmäßig mit
Win 3.11 und PDF 3.0 auf Kompatibilität getestet. Im Netz finde ich
regelmäßig als PDF 1.4 deklarierte Dateien, oft geschrieben von Adobe
Tools(!), die mein Reader 5.05 ohne vorherige Umwandlung mit
Ghostscripts ps2pdf14 nicht lesen kann.
Christian Zietz
2014-12-21 10:25:01 UTC
Permalink
Post by Axel Berger
Du hättest den Hinweis ergänzen können, daß das Paket die Dateiversion
PDF 1.7 voraussetzt und Versionen von pdflatex, die diese Version
schreiben können.
Woraus schließt Du das?

Christian
--
Christian Zietz - CHZ-Soft - czietz (at) gmx.net
WWW: http://www.chzsoft.de/
PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA
Loading...