获取环境的第一行

获取环境的第一行

正如标题所示,我正在寻找一种方法来获取环境中的第一行(可打印行)。我的第一次天真的尝试(忽略可打印要求)是这样的:

\newcommand*{\theline}{}
\newcommand*{\getline}[1]{%
  \renewcommand*{\theline}{#1}%
  #1%
}

\newenvironment{anewenvironment}{%
  \getline%
}{}

但是,之后\theline仅是第一个字符。例如。

\begin{anewenvironment}
  Test
\end{anewenvironment}
Line: \theline

印刷:

Test
Line: T

当所需输出为:

Test
Line: Test

我想这表明我对 TeX/LaTeX 如何处理参数存在根本性的误解,因此,如果您能提供任何关于如何处理参数的想法或更广泛的说明,我将不胜感激。谢谢。

PS:我理解“行”的概念相当模糊——回想起来,“段落”可能是一个更好的术语,尽管“X 个词”也适合我的用例。

编辑:目的是找到一种方法来自动获取诗歌或文本块的引文。请参阅这个问题有关更多信息,请访问 PoetryTeX。

编辑2:看起来这些解决方案都不能很好地满足我的需要,但是,它们确实回答了我的问题,所以我标记了一个答案。

答案1

如果您想要扫描多个标记,则需要告诉 TeX。 \def\x#1{...} 将只扫描一个标记。While \def\x#1\\{...} 将扫描直到\\到达 a(如果不存在这样的标记,则会引发错误。)

因此,当我们扫描一个段落时,我们会 \def\x#1\par{...}希望某一刻\par会发生某事。

\documentclass{report}

\begin{document}


\def\getline#1\par{%
\gdef\theline{#1}#1%
}

\newenvironment{anewenvironment}{%
  \getline%
}{}

\begin{anewenvironment}
Test

New par

\end{anewenvironment}
Line: \theline

\end{document}

par扫描“第一行”。如果环境中没有,则会引发错误。

输出将是

Test new par
Line: Test

答案2

但是,如果存在嵌套环境或第一个\par(空行)被括号隐藏,则很容易出现中断。

\documentclass{report}
\usepackage{environ}

\NewEnviron{anewenvironment}
 {\expandafter\getpar\BODY\par\end\BODY}
\long\def\getpar#1\par#2\end{\gdef\theline{#1}}

\begin{document}

\begin{anewenvironment}
Testa

New par

\end{anewenvironment}
Line: \theline

\begin{anewenvironment}
Testb
\end{anewenvironment}
Line: \theline
\end{document}

相关内容