尝试自己的类和包失败

尝试自己的类和包失败

如果这个标题不是最好的,我很抱歉,我想不出更好的标题。

我对 LaTeX 和 TeX 还不熟悉,我想创建一个可重复使用的类和一些可重复使用的包。

我的第一个包应该是一张颜色交替的表格。我使用 tabularx 包来实现这一点,除此之外还有其他用途。我打算把所有这些都放在一个包中,以创建一个使实际文档看起来更干净的环境,但我似乎无法让它在 Overleaf 中工作,我真的不知道我做错了什么。我花了两天时间才弄清楚,但没有成功。

这是我的主要 tex 文件(.tex):

\documentclass{unisummaries}

\title{Uni Summaries Template}
\author{kevin }
\date{December 2019}

\begin{document}

\begin{alternatingTable}{hh}
    \categories \textbf{\textit{Category One}} & \textbf{\textit{Category Two}}

    \row \textbf{Option 1}& Lorem ipsum.
    \row \textbf{Option 2}& Lorem ipsum.

\end{alternatingTable}

\end{document}

我最近尝试将我的班级小写,因为我不确定是否允许使用“uniSummaries”。

这是我的类文件(.cls):

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{unisummaries}[2019/12/20 Designed to write summaries for the Uni]

\ProcessOptions\relax

\LoadClass{article}
\RequirePackage{alternatingtable}

\endinput

这是我的包文件(.sty)

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{alternatingtable}[2094/12/20 Provides a table that alternates in color between each row]

\RequirePackage{tabularx}
\RequirePackage{geometry}
\RequirePackage{placeins}
\RequirePackage{colortbl}
\RequirePackage{xcolor}

\ProcessOptions\relax

\definecolor{TableRowColor}{rgb}{0.65,0.85,1}
\newcolumntype{h}{>{\hsize=.5\hsize}X}
\newcolumntype{d}{>{\hsize=.3\hsize}X}

\newenvironment{alternatingTable}[1]
{
    \bgroup
    \def\arraystretch{1.5}%
    \begin{table}[!ht]
        \centering
        \begin{tabularx}{100%}{#1}
            \newcommand{\headers}[1]{##1 \\ \hline \hline}
            \rowcolors{1}{TableRowColor}{white}
            \newcommand{\row}[1]{##1 \\ \hline}
}
{ 
            \hline  
        \end{tabularx}
    \end{table}
    \egroup
}

\endinput

非常感谢您的帮助,这样我就可以弄清楚如何创建自己的类和包来为所有文档提供通用功能。非常感谢。PS:我的编程技能没有帮助!:'D

答案1

首先,我要特别感谢@DavidCarlisle感谢他在评论中提供的帮助。

我现在已经想出了如何解决这个问题。在底部,我会发布所有问题的最终解决方案,以防有人感兴趣(因为我觉得在得到如此大的帮助后,我应该回报一些!)。

让我们分析一下我的许多错误。

首先,我使用了%字符,在 LaTeX 中它表示不应解释该行的其余部分。

接下来,我在一个新的环境中使用了 tabularx,但无法工作,因为 tabularx 实际上不是一个环境,而是一个包装器,并且与环境存在冲突,因此永远无法真正找到环境的末端。

相反,必须使用命令\tabularx\endtabularx再次感谢@DavidCarlisle

我还将 table 与 tabularx 结合起来,以便完成一些完全不必要的格式化。因此,整个表格环境可以完全删除。

我还定义了自己的列类型,但这些列类型不符合 tabularx 的要求,因此被删除了。更糟糕的是,我!在表列中使用了,覆盖了类定义的所有内容,使得包的重用变得更加困难。

最重要的是,我已将命令重命名\categories\headers现在的版本。

一旦一切修复完毕,最终产品看起来就会像这样:

交替表.sty:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{alternatingtable}[2094/12/20 Provides a table that alternates in color between each row]

\RequirePackage[table]{xcolor}
\RequirePackage{geometry}
\RequirePackage{tabularx}

\ProcessOptions\relax

\definecolor{TableRowColor}{rgb}{0.65,0.85,1}

\newenvironment{alternatingTable}[1]
{
\newcommand{\headers}[1]
{
\hiderowcolors
##1 \\
\showrowcolors
\hline
\hline
}
\newcommand{\row}[1]
{
##1 \\ 
\hline
}
\vspace{0.3cm}
\noindent
\bgroup
\def\arraystretch{1.5}%
\rowcolors{1}{TableRowColor}{white}
\tabularx{\textwidth}{#1}
}
{ 
    \hline  
\endtabularx
\egroup
\vspace{0.3cm}
}

\endinput

unisummaries.cls:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{unisummaries}[2019/12/20 Designed to write summaries for the Uni]

\ProcessOptions\relax

\LoadClass{article}
\RequirePackage{alternatingtable}

\endinput

而且我还弄乱了用法,因为我没有将所用命令的参数放在花括号中。

这是新的 tex 文件:

\documentclass{unisummaries}

\title{Uni Summaries Template}
\author{kevin }
\date{December 2019}

\begin{document}

\begin{alternatingTable}{XX}
    \headers{\textbf{\textit{Category One}} & \textbf{\textit{Category Two}}}

    \row{\textbf{Option 1} & Lorem ipsum.}
    \row{\textbf{Option 2} & Lorem ipsum.}
    \row{\textbf{Option 3} & Lorem ipsum.}

\end{alternatingTable}

\end{document}

输出是一张漂亮的表格:

最终图像的描述

最后说明:我还必须为 xcolor 包添加一个解决方法(我错误地没有正确导入它)。您必须遗憾地隐藏第一行的颜色,然后再显示它(参见\headers命令)。

现在我只希望我能弄清楚如何使着色从第一行开始,而不是第二行。

希望这对某人有帮助!

相关内容