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