Probleme bei der Verwendung leerer Zeilen im Farbwechselbefehl

Probleme bei der Verwendung leerer Zeilen im Farbwechselbefehl

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 \newcommandstandardmäßig \longMakros erstellt (während die mit Sternchen versehene Version kurze Makros erstellt), \DeclareDocumentCommandbewirkt 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 \DeclareDocumentCommanddie xparseVersion von ist \def, es wird also nicht geprüft, ob das Makro vorhanden ist. \NewDocumentCommandist die sicherere Version.

verwandte Informationen