goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einen text ZEILENWEISE farbig markieren

 

DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 31.03.17
Wohnort: ---
Version: 1.0
     Beitrag Verfasst am: 10.11.2017, 22:26     Titel: Einen text ZEILENWEISE farbig markieren
  Antworten mit Zitat      
Hallo!

Ich arbeite gerade an etwas, bei dem "Markierungen" im Text sehr nützlich wären, und zwar solche, die ich automatisch generieren kann. Gegeben sei also ein großer Absatz, und diesen möchte ich wie mit einem Textmarker markieren. An sich habe ich bereits ein Kommando, das diese Aufgabe erfüllt:

Code • Öffne in Overleaf

\documentclass{article}
\usepackage{xcolor}
\usepackage[ngerman]{babel}
\usepackage{blindtext}

\newcommand{\textmarked}[1]{\colorbox{yellow}{\parbox{\linewidth}{#1}}} % Zwinge den Text dazu, aufgrund einer \parbox bei Linienende umzubrechen und markiere das ganze gelb

\begin{document}
   \noindent
   \textmarked{\blindtext}
\end{document}
 


Allerdings stört es mich, dass nun natürlich die ganze Box gelb eingefärbt wird. Viel schöner fände ich es, wenn wirklich nur der Text eingefärbt werden würde, und der Freiraum unten rechts freibliebe. So wie ich es verstehe, geht das allerdings nur, indem man jede Zeile einzeln mit einer \colorbox behandelt. Das stellt mich wiederum vor ein Problem, da ich natürlich wissen müsste, wann genau ein Linebreak zustande gekommen ist, um darauf dann mit der colorbox reagieren zu können.

Vielleicht könnte man auch eine Umgebung erstellen, in der der Linebreak temporär umdefiniert wird? Das heißt, man speichert den normalen linebreak mittels \let, erneuert das Kommando und fügt nach dem Teil, der den Linebreak erzeugt, meine colourbox hinzu, und macht das ganze am Ende wieder rückgängig. Allerdings weiß ich nicht, welches Kommando LaTeX intern benutzt, um Zeilenumbrüche einzufügen. Außerdem könnte der Fakt, dass der Text der colourbox in {} stehen muss, zu einer herausforderung führen, da das Kommando für den Linebreak ja selbst keine Parameter nimmt, oder?

Hat jemand eine Idee wie man an dieses Problem herangehen könnte?

Zuletzt bearbeitet von DerArbeitenschreiberling am 12.11.2017, 15:56, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen

Johannes_B
Moderator
Moderator


Beiträge: 4858
Anmeldedatum: 01.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2017, 08:45     Titel:
  Antworten mit Zitat      
Google?
Spaß beiseite.
Du musst auf jeden Fall den Hyphenation Algorithmus umgehen, bzw. diesen aufbohren um die Boxen am Zeilenende nachträglich einzufärben. Ach Quatsch. Hast du einfach mal Google genutzt?
Code • Öffne in Overleaf

\documentclass[a5paper]{article}
\usepackage{xcolor}
\usepackage{soul}
\usepackage[ngerman]{babel}


\begin{document}
\large
   \noindent
   \hl{Hier steht ganz viel Text und Google hat mir geholfen mit textmarker LaTeX die L\"osung zu finden. Der LaTeX-Begleiter, Seite 95. War gar nicht schwer.}
\end{document}
https://books.google.de/books?id=jSSSyT2SAkgC&pg=PA95&lpg=PA95&dq=textmarker+latex&source=bl&ots=2vBI7uA5nz&sig=WCANgcSvPcJ_x_6vOz5uAJTTAo4&hl=de&sa=X&ved=0ahUKEwjxks3WgbbXAhWH16QKHTY7C20Q6AEIQjAD#v=onepage&q=textmarker%20latex&f=false

_________________

TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.
Private Nachricht senden Benutzer-Profile anzeigen

Stamm-
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2017, 13:58     Titel: Bereits Vorhandenes nutzen
  Antworten mit Zitat      
Dazu braucht man weder einen neuen Befehl noch ein zusätzliches Paket, weil 》xcolor《 mit \textcolor das notwendige Werkzeug bereits zur Verfügung stellt.
Code • Öffne in Overleaf
\documentclass[11pt,a4paper,ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage{babel}
\usepackage[margin=2cm,includeheadfoot]{geometry}

\usepackage{xcolor}

\usepackage{blindtext}

\begin{document}
  \textcolor{yellow}{\blindtext}
\end{document}

iTob
Forum-Meister
Forum-Meister


Beiträge: 1200
Anmeldedatum: 19.04.10
Wohnort: ---
Version: TeX Live auf OS X
     Beitrag Verfasst am: 11.11.2017, 14:27     Titel:
  Antworten mit Zitat      
Es soll aber nicht der Text selbst farbige werden sondern eine farbige Hinterlegung gemacht werden Wink und das geht eben nicht mit den Möglichkeiten von xcolor … dafür hat Johannes ja ne Antwort geliefert.
_________________

Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).
Private Nachricht senden Benutzer-Profile anzeigen

DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 31.03.17
Wohnort: ---
Version: 1.0
     Beitrag Verfasst am: 11.11.2017, 15:32     Titel:
  Antworten mit Zitat      
Johannes_B hat Folgendes geschrieben:

Code • Öffne in Overleaf

\documentclass[a5paper]{article}
\usepackage{xcolor}
\usepackage{soul}
\usepackage[ngerman]{babel}

\begin{document}
\large
   \noindent
   \hl{Hier steht ganz viel Text und Google hat mir geholfen mit textmarker LaTeX die L\"osung zu finden. Der LaTeX-Begleiter, Seite 95. War gar nicht schwer.}
\end{document}


Super! Schön dass du was gefunden hast. Meine Suche war da leider nicht so erfolgreich; wahrscheinlich, weil ich "Google" meist meide.

Jedenfalls funktioniert deine Lösung an deinem Beispiel ganz gut, aber beim Blindtext hört es bereits auf. Laut Paketdokumentation wird es in dem Falle wohl an "grouped hyphenatable material" liegen.
Das wird auch in meinem Text zum Problem, da ich, um das zu umgehen, um jede Textstelle, auf die ich ein Kommando anwende, manuell eine \mbox ziehen müsste. Denn leider geht nicht: \hl{ \testcmd{\mbox{hyphenatable}} }, sondern nur \hl{ \mbox{\testcmd{hyphentable}} }. Ansonsten hagelt es fehlermeldungen. Es kompiliert zwar trotzdem noch ein akzeptables Dokument, aber gut sind Fehlermeldungen nie.

Was \hl außerdem nicht kann: Mit richtigen Umlauten umzugehen. Das ist schlecht, denn das ganze Wort verschwindet, wenn es einen Umlaut enthält. Wenn es noch mehr solcher Wörter sind, verschwindet manchmal sogar ein Großteil des Absatzes.
Man müsste hier also Abstriche machen, indem man jeden Umlaut mit \"{arg} ersetzt. Das tue ich nur ungern.
Private Nachricht senden Benutzer-Profile anzeigen

iTob
Forum-Meister
Forum-Meister


Beiträge: 1200
Anmeldedatum: 19.04.10
Wohnort: ---
Version: TeX Live auf OS X
     Beitrag Verfasst am: 11.11.2017, 15:46     Titel:
  Antworten mit Zitat      
Wenn deine Dateien mit Unicode kodiert sind und du Paket auf CTANsoulutf8 benutzt, sollte es gehen. Siehe auch https://tex.stackexchange.com/q/160220/4918

Code • Öffne in Overleaf

\documentclass[a5paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage[ngerman]{babel}

\begin{document}
\large
   \noindent
   \hl{Hier steht ganz viel Text und Google hat mir geholfen mit textmarker LaTeX die Lösung zu finden. Der LaTeX-Begleiter, Seite 95. War gar nicht schwer.}
\end{document}


Dein Problem mit den Befehlen hab ich nicht wirklich verstanden, mach da mal nen konkretes Minimal-Beispiel zu, bitte.

Und nur weil du Google nicht magst, heißt das ja nicht, dass du das Internet nicht durchsuchen kannst, ehe du eine Frage stellst Wink gibt ja noch mehr Suchmaschinen …
_________________

Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).
Private Nachricht senden Benutzer-Profile anzeigen

DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 31.03.17
Wohnort: ---
Version: 1.0
     Beitrag Verfasst am: 11.11.2017, 16:15     Titel:
  Antworten mit Zitat      
@iTob

Danke! Das Paket Paket auf CTANsoulutf8 funktioniert.

Was die Befehle angeht, versuche ich eben, das mit der \mbox etwas zu automatisieren. Ich will nicht an jede Textstelle die ein Kommando hat eine \mbox schreiben müssen, sondern das soll ein Kommando für mich machen. Das MWE hier sollte das hoffentlich gut zeigen. Am besten die Kommandos einzeln auskommentieren um zu sehen, wie sie sich verhalten.

Code • Öffne in Overleaf
\documentclass[a5paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage[ngerman]{babel}


\newcommand{\thiswontwork}[1]{#1}

\newcommand{\thiswillwork}[1]{#1}

\newcommand{\thisalsowontwork}[1]{\mbox{#1}}

\begin{document}
\large
   \noindent
   \hl{
         Hier steht \thiswontwork{ganz viel hyphenatable Text
} %% Funktioniert nicht, weil jedes Kommando automatisch zu einer "Gruppierung" führt, und Text innerhalb einer Gruppierung nicht silbentrennbar sein darf %%
         und
         \mbox{\thiswillwork{Google hat mir geholfen}} %% Funktioniert, weil es in eine \mbox gesetzt wurde, ansonsten würde es nicht gehen. %%
         mit textmarker LaTeX die Lösung zu finden. Der LaTeX-Begleiter, Seite 95.
        \thisalsowontwork{War wirklich gar nicht schwer.} %% Funktioniert nicht, obwohl die \mbox{} doch eigentlich nicht silbentrennbar sein dürfte?
   }
\end{document}


Was die Suchmaschine angeht, wollte ich bloß ausdrücken, dass meine Suchmaschine eventuell weniger findet als Google. Bei mir bestanden die Ergebnisse zunächst nur aus "TexMaker", und als ich das herausgefiltert hatte waren es eher irrelevante Sachen wie Wörterbucheinträge oder Übersetzungen für das Wort "Textmarker". Das vermittelte mir schon mal den Eindruck, dass es keine offensichtliche Lösung für das Problem gäbe.
Private Nachricht senden Benutzer-Profile anzeigen

iTob
Forum-Meister
Forum-Meister


Beiträge: 1200
Anmeldedatum: 19.04.10
Wohnort: ---
Version: TeX Live auf OS X
     Beitrag Verfasst am: 11.11.2017, 19:28     Titel:
  Antworten mit Zitat      
Schau mal in die soul (ohne utf8) Doku in Abschnitt 5.2. Da wir erklärt, wie man eigene Befehle „registrieren“ kann, damit sie mit dem Paket funktionieren.

Suchmaschine: Hm … was nutzt du denn? Ich arbeite schon ein paar Jahre mit Duckduckgo und finde dort bisher alles was ich brauche und kann keinen Unterschied zu Google feststellen …
_________________

Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).
Private Nachricht senden Benutzer-Profile anzeigen

DerArbeitenschreiberling
Forum-Anfänger
Forum-Anfänger

Beiträge: 27
Anmeldedatum: 31.03.17
Wohnort: ---
Version: 1.0
     Beitrag Verfasst am: 12.11.2017, 15:55     Titel:
  Antworten mit Zitat      
Du hast recht, "Fontkommandos" lassen sich mit \soulregister{<cmd>}{<0/1>} kinderleicht registrieren. Das heißt, Kommandos die entweder 0 oder 1 Parameter entgegennehmen.

Leider ist das für mich ein Problem. Die Kommandos, die ich in meinem Dokument verwende, nehmen bis zu drei Parameter entgegen. Sehen wir uns das ganze einmal an:

Code • Öffne in Overleaf

\documentclass[a5paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage[ngerman]{babel}


\newcommand{\multiarg}[3][OPTIONAL]{#2}
\soulregister{\multiarg}{1}

\begin{document}
   \large
   \noindent
   \hl{Hier steht ganz viel Text und \multiarg[DEFINED]{der}{TEST} wird jetzt markiert.}
\end{document}


Was passiert? Mein Kommando \multiarg, welches zunächst drei Parameter entgegennahm, wurde höchstwahrscheinlich von \soulregister umdefiniert, sodass es nur noch einen Parameter entgegennimmt. Das bedeutet, dass die anderen Parameter (DEFINED und TEST) um das Kommando herum einfach in den Text gedruckt werden und gar nicht zum Kommando \multiarg gelangen. Denn würden diese Parameter zu \multiarg gelangen, dann würde dieses Kommando sie ignorieren, da laut der Definition nur Parameter #2 verwendet wird. Außerdem wird der Text nach meinem Kommando nicht mehr markiert.

Gut, man wundert sich jetzt vielleicht warum ich überhaupt Kommandos habe, die bestimmte Parameter gar nicht verwenden.
Das liegt daran, dass ich mein Dokument schnell und einfach in mehreren Versionen kompilieren möchte. Bei einer dieser Versionen möchte ich einige Texte, wie hier erfragt, markieren; bei der anderen möchte ich ganz andere Kommandos ausführen, die z.B. Textstellen auf besondere Art und Weise markieren und dabei Marginalen drucken. Ich habe das zunächst so gelöst, indem ich diese Kommandos erst "scharf stellen" muss.
Das heißt, ich definiere sie zunächst so, dass sie zwar die drei Parameter entgegennehmen, aber nur einen Parameter -- denjenigen, der den Text darstellt, der formatiert werden soll -- ausgeben. Nach dem Kompilieren sieht es also erstmal so aus, als würde es diese Kommandos gar nicht geben. Erst mit einem weiteren Kommando, das diese "dummy commands" dann allesamt neu definiert, werden die Kommandos "scharf gestellt" sodass sie ihre Funktionalität erhalten.
Ich weiß, es wäre vielleicht besser, das ganze mit Booleans zu handhaben, allerdings empfinde ich diese Möglichkeit als genauso schnell und dazu noch etwas einfacher zu implementieren.


Jedenfalls bräuchte ich jetzt eine Möglichkeit, diese beiden anderen Parameter zu ignorieren. Da fielen mir zwei Möglichkeiten ein:
1.) Ein Kommando \onlyifdefined erstellen, das die Parameter nur übergibt, wenn auch dieses Kommando scharfgestellt wurde:

Code • Öffne in Overleaf
\documentclass[a5paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{xcolor}
\usepackage{soulutf8}
\usepackage[ngerman]{babel}


\newcommand{\multiarg}[3][OPTIONAL]{#2}
\soulregister{\multiarg}{1}

\newcommand{\onlyifdefined}[1]{}

\newcommand{\define
}{
   \renewcommand{\onlyifdefined
}[1]{##1}
   }

%\define % Alle Parameter, die mit \onlyifdefined{} umschlossen sind, durchlassen. Ansonsten alle diese Parameter löschen.

\begin{document}
   \large
   \noindent
   \hl{Hier steht ganz viel Text und \multiarg[\onlyifdefined{DEFINED}]{der}{\onlyifdefined{TEST}} wird jetzt markiert.}
\end{document}


Das hat allerdings einige Probleme. Zum einen sind noch die eckigen Klammern des optionalen Arguments zu sehen (das Problem könnte ich lösen, indem ich meine Kommandos so umdefiniere, dass das optionale Argument verpflichtend wird). Zum anderen wird der Text nach meinem Kommando genau wie beim Beispiel oben nicht mehr markiert.

2.) Alle Parameter in ein einziges Argument schreiben, und das dann im Kommando irgendwie auftrennen. Ähnlich wie die Listen, die z.B. beim Laden eines Pakets übergeben werden.

Das wäre allerdings ziemlich kompliziert und wahrscheinlich auch sehr unleserlich. Wenn sich herausstellen sollte, dass dies die einzige Möglichkeit ist, dann würde ich wohl auf die Textmarkierungen verzichten müssen.



Und nochmal zur Suchmaschine: Ich benutze auch DuckDuckGo und bin damit sehr zufrieden, allerdings waren die Ergebnisse in diesem Falle schon recht unterschiedlich. Während mich bei Google bereits der 5. Link zu einer Seite führt, die mir geholfen hätte, ist es bei DDG erst der 11. Ohne bis dorthin zu scrollen hatte ich aber schon die Suche [textmarker latex -"texmaker"] gestartet, und da finde ich auf einmal gar keine relevanten Ergebnisse mehr. Ich verstehe nicht ganz, wie das filtern des literals "texmaker" dafür sorgen kann, dass z.B. dieser Link ebenfalls entfernt wird, aber ich werde wohl in Zukunft mehr darauf achten müssen.

Auch für den Fall, dass wir hier keine genaue Lösung finden sollten, bedanke ich mich aber schonmal für die ausführliche Hilfe. Ich denke, dass ich trotzdem einiges mit diesen Informationen anfangen kann.
Private Nachricht senden Benutzer-Profile anzeigen

iTob
Forum-Meister
Forum-Meister


Beiträge: 1200
Anmeldedatum: 19.04.10
Wohnort: ---
Version: TeX Live auf OS X
     Beitrag Verfasst am: 12.11.2017, 18:55     Titel:
  Antworten mit Zitat      
Verstehe … schau mal hier https://tex.stackexchange.com/q/139463/4918 ob das hilft. Du kannst auch generell nochmal auf TeX.SX stöbert, z.B. in dem du einen der Tags unterhalb der Frage anklickst.
_________________

Ich biete Hilfe, Beratung und Schulung für alle Fragen rund um TeX, Buchgestaltung und Textsatz, sowie Grafik- und Kommunikationsdesign.
Mehr Infos und Kontakt unter tobiw.de.

Hier schreibe ich über TeX: Mein Blog „TeX-Beispiel des Monats“ (Deutsch) und TeX.tips (Englisch).
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen Gehe zu Seite 1, 2  Weiter



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de