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:
\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:
\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.
Du hast recht, "Fontkommandos" lassen sich mit [i]\soulregister{<cmd>}{<0/1>}[/i] 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]
\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}[/code]
Was passiert? Mein Kommando [i]\multiarg[/i], welches zunächst drei Parameter entgegennahm, wurde höchstwahrscheinlich von [i]\soulregister[/i] 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 [i]\multiarg[/i] 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 [i]\onlyifdefined[/i] erstellen, das die Parameter nur übergibt, wenn auch dieses Kommando scharfgestellt wurde:
[code]\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}[/code]
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. [url=http://www.mrunix.de/forums/showthread.php?51437-Text-farblich-hinterlegen]dieser Link[/url] 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.