我想运行此代码以打印 中参数的所有行(包括每个空白行)\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}