Пустые строки в скрытой части

Пустые строки в скрытой части

Я определил следующую среду для вставки решения в свой текст:

\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. По замыслу Кнута такое поведение макропараметров не допускалось. Только путем добавления\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}

введите описание изображения здесь

Связанный контент