这是对我的问题的跟进更改文档部分的颜色系统?
我尝试通过将文档定义为蓝色(或我想要的任何颜色)来解决此问题,然后将颜色切换回适合我特定环境的正常颜色,然后再切换回来。从示例中可以更清楚地看出这一点。但是,我的问题不是颜色切换,它运行完美。
我的问题是我不能在新命令中使用任何空行!
例如
\iSol{ \lipsum[75] }
运行完美,但是,
\iSol{ \lipsum[75]
\lipsum[66] }
抱怨缺少par
。有什么想法可以修复命令以便我可以在其中使用空行吗?
代码
\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}
答案1
虽然LaTeX2e
\newcommand
默认情况下会创建\long
宏(而带星号的版本会创建短宏),但\DeclareDocumentCommand
情况恰恰相反。为了允许在宏参数中使用段落,您必须在说明符前加上+
, (在您的例子中):
\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
}
请注意,这\DeclareDocumentCommand
是xparse
的版本\def
,因此它不会检查宏是否存在。\NewDocumentCommand
是更安全的版本。