我定义了以下环境来在我的文本中插入解决方案:
\newif\ifsolution
\def\solution#1{\ifsolution {\color{blue}\textbf{Oplossing:} #1} \else \relax\fi}
如果我\solutiontrue
向文件中添加内容,它会添加蓝色的解决方案,但如果我输入\solutionfalse
,它会完全忽略它们。到目前为止,一切顺利。
但我遇到的问题是,在解决方案本身中,我似乎无法插入我真正需要的空行。例如,如果我输入
\solution{This is the first line of the solution.
This is the second line. QED}
我收到错误。我明白我必须写
\solution{This is the first line of the solution.
This is the second line. QED}
既然空行是不可错过的,有没有办法避免错误?
答案1
我不太确定这是否真的是你想要的。但这里有一种方法可以在宏输入中允许空行并省略解决方案,同时将其空格作为通配符保留在输出中:
\documentclass{article}
\usepackage{xcolor}
\newif\ifsolution
\long\def\solution#1{%
\setbox0\vbox{#1}
\vbox to \ht0 {
\ifsolution {\color{blue}\textbf{Oplossing:} #1} \else \relax\fi}}
\solutiontrue
%\solutionfalse
\setlength\parindent{0em}
\begin{document}
(before solution)
\solution{%
This is the first line of the solution.
This is the second line. QED
}
(after solution)
\end{document}
和\solutiontrue
和\solutionfalse
默认情况下,宏输入中空白行不起作用的原因在于 TeX 基本原理。根据设计,Knuth 不允许宏参数的这种行为。只有通过添加\long
才能克服这个问题(有些人称之为限制)。在这个问题您会发现有关此主题的很好的讨论。
答案2
我以不同的方式表达了你的问题,那么这个解决方案怎么样\makecell
?
\documentclass{article}
\usepackage{color}
\usepackage{makecell}
\newif\ifsolution
\def\solution#1{\ifsolution {\color{blue}\textbf{Oplossing:} #1} \else \relax\fi}
\solutiontrue
\begin{document}
\solution{\makecell[l]{This is the first line of the solution.\vspace{3ex}\\
This is the second line. QED}}
\end{document}