宏中的命令 \obeylines

宏中的命令 \obeylines

我需要在文档的前言部分收集数据(输入字符串序列),但这些字符串将在文档的后面进行排版,并且必须遵守在键盘上输入字符串时设置的换行符。以下是 MWE:

\documentclass[12pt]{memoir}

\newcommand{\makeAddress}[1]{
   \def\address{%
       {\obeylines #1}
   }
}

\makeAddress{First line
Second line}

\begin{document}

Some text here just to fill before typesetting the line-break obeying lines.

\address

And now more text, not obeying line breaks verbatim.

\end{document}

我发现,我按如下所示将参数写入命令\makeAddress,即,只需按一下键盘上的RETURN键,我就会得到一行输出\address,而如果我使用两次敲击,在字符串“第一行”和“第二行”之间的参数中留一个空行,我就会得到预期的行为:两行输出。我做错了什么?

Ian Thompson 的回答明确解决了换行问题。这是我在这篇文章中最初提出的问题,因此他的回复可以算作答案。但现在我的观点是,我怎样才能做到这一点,同时又不让文本排版到它应该排版的位置?

答案1

问题是,TeX在读取 的参数时,它不遵守换行符\makeAddress,因此它会忽略单个回车符。如果有两个回车符,TeX则会插入一个\par,因此输出中确实会出现换行符。要使其在只有一个回车符的情况下工作,您只需更改事情发生的顺序即可。

\documentclass[12pt]{memoir}
\makeatletter
\newcommand{\@makeAddress}[1]{
    \def\address{%
        {#1
        }
    \par\noindent}
    \address
\egroup}
\newcommand\makeAddress{\bgroup\obeylines\@makeAddress}
%
\begin{document}
\makeAddress{First line
Second line}
\end{document}

编辑

您还需要使用分组来防止\obeylines\makeAddress执行后仍然有效。请注意,\egroup不能直接放在后面,\@makeAddress因为该宏需要找到一个参数。

相关内容