
Dies ist eine Fortsetzung meiner FrageFarbsystem für einen Teil eines Dokuments ändern?
Ich habe versucht, dieses Problem zu lösen, indem ich das Dokument blau (oder eine beliebige andere Farbe) definiert habe, dann die Farben für meine spezielle Umgebung wieder auf den Normalwert zurückgesetzt und sie dann wieder zurückgesetzt habe. Anhand eines Beispiels wird das deutlicher. Mein Problem liegt jedoch nicht beim Farbwechsel, dieser funktioniert einwandfrei.
Mein Problem ist, dass ich in meinem neuen Befehl keine Leerzeilen verwenden kann!
Zum Beispiel
\iSol{ \lipsum[75] }
funktioniert perfekt, aber
\iSol{ \lipsum[75]
\lipsum[66] }
Beschwert sich über ein fehlendes par
. Irgendeine Idee, wie ich den Befehl reparieren kann, damit ich darin Leerzeilen verwenden kann?
Code
\documentclass{article}
% Uses the default color profile from UiT's official guidelines
\usepackage{xcolor,lipsum}
\usepackage{xparse,etoolbox}
\newtoggle{isLF}
\definecolor{UiT-main}{HTML}{003349}
\definecolor{UiT-red}{HTML}{CB333B}
\definecolor{UiT-blue}{HTML}{007396}
\definecolor{UiT-cyan}{HTML}{59BEC9}
\definecolor{UiT-orange}{HTML}{F2A900}
% The green is not default, but very useful
\colorlet{UiT-green}{green!50!black}
\colorlet{UiT-solution}{black}
\colorlet{UNI-default}{.}
\colorlet{UNI-current}{UNI-default}
\colorlet{UNI-monochrome}{black!50!white}
\newcommand{\resetUiTcolors}{
\definecolor{UiT-main}{HTML}{003349}
\definecolor{UiT-red}{HTML}{CB333B}
\definecolor{UiT-blue}{HTML}{007396}
\definecolor{UiT-cyan}{HTML}{59BEC9}
\definecolor{UiT-orange}{HTML}{F2A900}
% The green is not default, but very useful
\colorlet{UiT-green}{green!50!black}
}
\newcommand{\monoUiTcolors}{
\colorlet{UNI-monochrome}{black!50!white}
\colorlet{UiT-solution}{black}
\colorlet{UiT-main}{UNI-monochrome}
\colorlet{UiT-red}{UNI-monochrome}
\colorlet{UiT-blue}{UNI-monochrome}
\colorlet{UiT-cyan}{UNI-monochrome}
\colorlet{UiT-orange}{UNI-monochrome}
% The green is not default, but very useful
\colorlet{UiT-green}{UNI-monochrome}
}
\newcommand{\UNIfullcolor}[1]{
\colorlet{UNI-default}{.}
\resetUiTcolors
\resetUNIhypersetup
\color{UiT-solution}
#1
\monoUiTcolors
\monoUNIhypersetup
\color{UNI-default}
}
\DeclareDocumentCommand{\iSol}{m G{}}{
\iftoggle{isLF}{
\UNIfullcolor{#1}
}{#2}
}
% Hyperlenker og klikkbare lenker.
\RequirePackage{hyperref}
\hypersetup{
pdftoolbar=true, % show Acrobat’s toolbar?
pdfmenubar=false, % show Acrobat’s menu?
pdffitwindow=false, % window fit to page when opened
pdfstartview={FitH}, % fits the width of the page to the window
linktoc=all, % Link all the things in the toc
colorlinks=true, % false: boxed links; true: colored links
linkcolor=black, % color of internal links (change box color with linkbordercolor)
citecolor=UiT-cite, % color of links to bibliography
filecolor=UiT-orange, % color of file links
urlcolor=UiT-url % color of external links
}
\newcommand{\resetUNIhypersetup}{%
\hypersetup{
colorlinks=true, % false: boxed links; true: colored links
linkcolor=black, % color of internal links (change box color with linkbordercolor)
citecolor=UiT-cite, % color of links to bibliography
filecolor=UiT-orange, % color of file links
urlcolor=UiT-url % color of external links
}%
}
\newcommand{\monoUNIhypersetup}{%
\hypersetup{
colorlinks=true, % false: boxed links; true: colored links
linkcolor=UNI-monochrome, % color of internal links (change box color with linkbordercolor)
citecolor=UNI-monochrome, % color of links to bibliography
filecolor=UNI-monochrome, % color of file links
urlcolor=UNI-monochrome % color of external links
}%
}
\begin{document}
\color{blue}
\lipsum[5]
\settoggle{isLF}{true}
% this works
\iSol{\lipsum[75]}
% this dont
%\iSol{\lipsum[75]
%
%\lipsum[66]}
\lipsum[66]
\end{document}
Antwort1
Während in LaTeX2e
\newcommand
standardmäßig \long
Makros erstellt (während die mit Sternchen versehene Version kurze Makros erstellt), \DeclareDocumentCommand
bewirkt es das Gegenteil. Um Absätze in einem Makroargument zuzulassen, müssen Sie dem Spezifizierer ein voranstellen +
, in Ihrem Fall:
\DeclareDocumentCommand{\iSol}{+m G{}}{% <-- don't forget this
\iftoggle{isLF}{% <-- don't forget this
\UNIfullcolor{#1}% <-- don't forget this
}{#2}% <-- don't forget this
}
Beachten Sie, dass dies \DeclareDocumentCommand
die xparse
Version von ist \def
, es wird also nicht geprüft, ob das Makro vorhanden ist. \NewDocumentCommand
ist die sicherere Version.