表格内自定义环境中不需要的缩进

表格内自定义环境中不需要的缩进

我创建了两个自定义环境和一个自定义命令,以便以表格形式轻松显示模块和它们所包含的类的概览。但是,每个模块中的第一个类名最终都出现了不必要的缩进。我该如何删除此缩进?

例子:

\documentclass[12pt]{article}

\usepackage{multirow}
\usepackage{etoolbox}

% PREAMBLE

%
% ===================== %
% Module overview table %
% ===================== %
\newenvironment{moduleoverview}{%
    \begin{tabular}{|c|c|}
        \hline
            \textbf{Module} & 
            \textbf{Class}
        \\ \hline
}
{%
    \end{tabular}
}

\newtoggle{firstmtclass}
\newenvironment{momodule}[2]{%
    % First argument: module name
    % Second argument: number of classes in module
    \multirow{#2}{*}{%
        #1  
    }
    &   
    \toggletrue{firstmtclass}
}
{%
    \hline
}

\newcommand{\moclass}[1]{%
    % First argument: class name
    \iftoggle{firstmtclass}{%
        \togglefalse{firstmtclass}
    }{%
        &
    }
        #1
    \\
}

\begin{document}

\begin{moduleoverview}
    \momodule{Module name A}{2}
        \moclass{class name 1}
        \moclass{class name 2}
    \endmomodule
    \momodule{Module name B}{3}
        \moclass{class name 3}
        \moclass{class name 4}
        \moclass{class name 5}
    \endmomodule
\end{moduleoverview}

\end{document}

生成:

在此处输入图片描述

答案1

你缺少一些%和一个\ignorespaces:空格(行尾)

\momodule{Module name A}{2}

不会被忽略。

我重新格式化了代码,否则我将无法理解它。

\documentclass[12pt]{article}

\usepackage{multirow}
\usepackage{etoolbox}

% PREAMBLE

%
% ===================== %
% Module overview table %
% ===================== %
\newenvironment{moduleoverview}
 {%
  \begin{tabular}{|c|c|}
  \hline
  \textbf{Module} & \textbf{Class} \\ \hline
 }
 {%
  \end{tabular}
 }

\newtoggle{firstmtclass}
\newenvironment{momodule}[2]
 {% First argument: module name
  % Second argument: number of classes in module
  \multirow{#2}{*}{#1} & \toggletrue{firstmtclass}\ignorespaces % <-- This was missing
 }
 {%
  \hline
 }

\newcommand{\moclass}[1]{%
  % First argument: class name
  \iftoggle{firstmtclass}
   {\togglefalse{firstmtclass}}
   { & }% <-- This was missing
   #1 \\
}

\begin{document}

\begin{moduleoverview}
  \momodule{Module name A}{2}
    \moclass{class name 1}
    \moclass{class name 2}
  \endmomodule
  \momodule{Module name B}{3}
    \moclass{class name 3}
    \moclass{class name 4}
    \moclass{class name 5}
  \endmomodule
\end{moduleoverview}

\end{document}

在此处输入图片描述

我提出了一个不同的解决方案,它使用 LaTeX3 编程;语法虽然发生了变化,但我相信它更容易管理,因为您不需要传递模块的数量。

\documentclass[12pt]{article}

\usepackage{xparse}

\newenvironment{moduleoverview}
 {
  \begin{tabular}{|c|c|}
  \hline
  \textbf{Module} & \textbf{Class} \\ \hline
 }
 {
  \end{tabular}
 }

\ExplSyntaxOn
\NewDocumentCommand{\momodule}{ m m }
 {% First argument: module name
  % Second argument: modules
  #1 & \momodules_modules:n { #2 }
 }

\seq_new:N \l_momodules_modules_seq
\cs_new_protected:Npn \momodules_modules:n #1
 {
  \seq_set_split:Nnn \l_momodules_modules_seq { , } { #1 }
  \begin{tabular}{@{}c@{}}
  \seq_use:Nn \l_momodules_modules_seq { \\ }
  \end{tabular} \\ \hline
 }
\ExplSyntaxOff

\begin{document}

\begin{moduleoverview}
  \momodule{Module name A}{
    class name 1,
    class name 2
  }
  \momodule{Module name B}{
    class name 3,
    class name 4,
    class name 5
  }
\end{moduleoverview}

\end{document}

相关内容