我知道之前也出现过类似的问题,但是所提出的解决方案似乎都不适合我。
我在 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}