隐藏部分有空行

隐藏部分有空行

我定义了以下环境来在我的文本中插入解决方案:

\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

输出1

\solutionfalse

输出2


默认情况下,宏输入中空白行不起作用的原因在于 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}

在此处输入图片描述

相关内容