宏参数 #1 与包 parselines 的内部参数 #1 之间存在冲突

宏参数 #1 与包 parselines 的内部参数 #1 之间存在冲突

我想运行此代码以打印 中参数的所有行(包括每个空白行)\PrintAllLines{}。为此,我想使用parselines包,因为它可以很好地识别所有空白行。\obeylines不是一个选项,因为它无法识别彼此下的多个空白行。

这段代码的问题是,#1里面的参数\begin{parse lines}[\noindent]{#1\\}实际上应该是插入到和之间的参数 \begin{parse lines},而不是传递的\end{parse lines}参数。这两个参数有冲突,我不知道如何解决这种情况。#1\PrintAllLines{}#1

有人有好主意如何处理这个问题吗?

是否可能通过传递参数\PrintAllLines{},但使用代码以外的其他东西#1,以便内部#1运行\begin{parse lines}[\noindent]{#1\\}良好?

MWE 非常棒,因为我刚接触 LaTeX,仍在学习。

\documentclass[12pt,a4paper]{article}
\usepackage{parselines}

\renewcommand{\PrintAllLines[1]{
\begin{parse lines}[\noindent]{#1\\}
#1
\end{parse lines}
}}

\begin{document}
\PrintAllLines{

line 1

line 2 with multiple spaces above

line 3 with multiple spaces above

}

\end{document}

答案1

由于parselines只是达到目的(保留每个换行符)的一种手段,因此这里还有另一种手段。使用listofitems,并进行宏定义。

\documentclass{article}
\usepackage{listofitems}
\newcommand\PrintAllLines{\begingroup\obeylines\PrintAllLinesAux}
\begingroup
\obeylines
\gdef\PrintAllLinesAux#1{%
  \setsepchar{
  }%
  \readlist\mytest{#1}%
  \foreachitem\z\in\mytest[]{\noindent\z\\}%
  \endgroup%
}
\endgroup
\begin{document}
\PrintAllLines{this
is


a

test}

For comparison, normal endline intake:

this
is


a

test
\end{document}

在此处输入图片描述

自定义很简单,只需更改参数即可\foreachitem。例如,如果\foreachitem\z\in\mytest[]{\noindent\makebox[2em][l]{\scriptsize\zcnt:}\z\\}%使用,则结果如下:

在此处输入图片描述

答案2

如写菲利佩·奥莱尼克由于实施特点,您无法使用parse lines环境。\newcommand

但是您可以定义自己的环境来简化您的工作,如下所示:

\documentclass[12pt,a4paper]{article}
\usepackage{parselines}

\begin{document}

\newenvironment{my parse lines}
    {\begin{parse lines}[\noindent]{##1\\}}
    {\end{parse lines}}

\begin{my parse lines}

line 1


line 2 with multiple spaces above


line 3 with multiple spaces above
\end{my parse lines}

\end{document}

相关内容