将“多行”文本转换为“单行”文本的宏(删除换行符?)

将“多行”文本转换为“单行”文本的宏(删除换行符?)

请考虑以下示例:

\documentclass{minimal}

\def\myMultiLineText{%
Line One Line One \\ %
Line Two Line Two \\ %
Line Three Line Three \\ %
Line Four Line Four  %
}

\begin{document}

Here is multi-line: \myMultiLineText ...

\end{document}

在文档中,我想插入类似以下内容:

Here is single-line: \doSingleLine{\myMultiLineText} ...

...宏基本上会从存储的文本中\doSingleLine{}删除换行符( ) (因此其内容将呈现在一行上)。\\\myMultiLineText

有人可以提供这样一个宏的例子吗?

答案1

\newcommand\doSingleLine[1]
    {\let\normalnewline=\\
     \let\\=\relax
     #1%
     \let\\=\normalnewline}

编辑:正如 egreg 所指出的,这并没有考虑到可选参数。这里有一个处理和的\\替代实现:\\*\\[10pt]

\makeatletter
\newcommand\gobblestar
    {\futurelet\@let@token\@dogobblestar}

\def\@dogobblestar
    {\let\next=\relax
     \ifx\@let@token*%
        \def\next{\@gobble}%
     \else\ifx\@let@token[%
         \def\next{\@gobbleoptional}%
     \fi\fi
     \next}

\def\@gobbleoptional[#1]{}
\makeatother

\newcommand\doSingleLine[1]
    {\let\normalnewline=\\
     \let\\=\gobblestar
     #1%
     \let\\=\normalnewline}

请注意,不能直接使用,\@ifstar因为它会占用空间\\

答案2

把它放进\mbox

\mbox{\myMultiLineText}

相关内容