我需要在文档的前言部分收集数据(输入字符串序列),但这些字符串将在文档的后面进行排版,并且必须遵守在键盘上输入字符串时设置的换行符。以下是 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
因为该宏需要找到一个参数。