在自定义环境中忽略空格

在自定义环境中忽略空格

我知道之前也出现过类似的问题,但是所提出的解决方案似乎都不适合我。

我在 LaTeX 中使用了一些自定义环境。下面是“licenses”环境的代码。此环境基本上是一个表,我使用“license”命令来指定表的每一行。

\newenvironment{licenses}
{%
\def\lwidth{0.25\textwidth}%
\def\rwidth{0.69\textwidth}%
%
\newcommand\license[3]{%
\ifdef{\separator}{\separator}{}%
##1 & ##3 %
\def\separator{\\}%
}%
%
\begin{longtable}{>{\bfseries}L{\lwidth}!{\VRule}R{\rwidth}}%
}
{\end{longtable}}

然后我使用如下环境...但是我遇到一个问题,即每个\license命令之间的空格会影响输出。

\begin{licenses}
\license{...}{...}

\license{...}{...}

\license{...}{...}

\end{licenses}

我尝试过该\ignorespaces命令以及类似的命令\catcode32=9\relax,但这些命令似乎对我的情况都不起作用。

这是一个最小工作示例:

\documentclass[10pt]{article}

\usepackage{etoolbox}           % for ifdef
\usepackage{longtable}          % for tables that span more than one page
\usepackage{tabularx}           % for newcolumntype
\usepackage{xcolor}             % for colours

\definecolor{lightgray}{gray}{0.8}
\newcolumntype{L}[1]{>{\raggedleft}p{#1}}
\newcolumntype{R}[1]{p{#1}}
\newcommand\VRule{\color{lightgray}\vrule width 0.5pt}

\newenvironment{licenses}
 {%
\def\lwidth{0.25\textwidth}%
\def\rwidth{0.69\textwidth}%
%
\newcommand\license[3]{%
\ifdef{\separator}{\separator}{}%
##1 & ##3 %
\def\separator{\\}%
}%
%
\begin{longtable}{>{\bfseries}L{\lwidth}!{\VRule}R{\rwidth}}
}
{\end{longtable}}

\begin{document}
\section*{Licenses}
\begin{licenses}
\license{Test1}{Test1}{Test1}

\license{Test2}{Test2}{Test2}

\license{Test3}{Test3}{Test3}

\end{licenses}
\end{document}

答案1

最近我一直在寻找吞噬所有后续空行的命令。主要思想是定义一个命令\gobblepars(取自这个博客):

\makeatletter
\newcommand\gobblepars{%
    \@ifnextchar\par%
        {\expandafter\gobblepars\@gobble}%
        {}}
\makeatother

如果将此命令用作命令定义的最后一条命令,是否会起作用\license

答案2

假设licenses环境中什么都没有发生,对 user946850 的想法进行改进就可以奏效:

\documentclass[10pt]{article}

\usepackage{longtable}          % for tables that span more than one page
\usepackage{xcolor}             % for colours

\definecolor{lightgray}{gray}{0.8}
\newcolumntype{L}[1]{>{\raggedleft}p{#1}}
\newcolumntype{R}[1]{p{#1}}
\newcommand\VRule{\color{lightgray}\vrule width 0.5pt}

\newcommand{\license}[3]{%
  #1 & #3 \bingo
}
\makeatletter
\newcommand\bingo{%
  \@ifnextchar\par
    {\expandafter\bingo\@gobble}
    {\@ifnextchar\end{}{\\[2ex]}}}
\makeatother
\newenvironment{licenses}
 {%
  \def\lwidth{0.25\textwidth}%
  \def\rwidth{0.69\textwidth}%
  \begin{longtable}{>{\bfseries}L{\lwidth}!{\VRule}R{\rwidth}}
}
{\end{longtable}}
\usepackage{lipsum}
\begin{document}
\section*{Licenses}
\begin{licenses}

\license{Test1}{Test1}{Test1}

\license{Test2}{Test2}{Test2}

\license{Test3}{Test3}{Test3}

\end{licenses}
\end{document}

相关内容