带有可选参数的 newcommand 定义中存在问题

带有可选参数的 newcommand 定义中存在问题

我正在尝试在.cls文件中定义一个新命令,如下所示:

\newcommand{\test}[2][]{%
    \ifthenelse{\isempty{#1}}%
    {\raggedright\itshape{#2}}%
    {\raggedright#1 \hfill \itshape{#2}}%
}

但是,这给出了LaTeX Error: Something's wrong--perhaps a missing \item。我已将 包含在包xifthen\RequirePackage{xifthen}。我还应该提到,如果删除[],它用于可选参数,代码似乎可以正常工作。我在这里遗漏了什么?

编辑:这是类文件的主要部分:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{my_class}[2020/07/31 My custom class]
\LoadClass{article}
\RequirePackage[T1]{fontenc}
\RequirePackage{xifthen}

\newenvironment{myenv}%
    {\addvspace{0.1in}\noindent\ignorespaces}
    {\par\noindent%\addvspace{0.1in}
    \ignorespacesafterend}

\newcommand{\first}[2]{%
    {\begingroup \raggedright \textbf{#1} \hfill \textit{#2} \newline \endgroup}%
}

\newcommand{\second}[2][]{%
    \ifthenelse{\isempty{#1}}%
    {\textit{\raggedleft #2} \newline}%
    {\begingroup \raggedright #1 \hfill \textit{#2} \newline \endgroup}%
}

这是一个最小的工作示例:

\documentclass{my_class}

\begin{document}

\section{First section}

\begin{myenv}
    \first{This is bold text}{This is italic text}
    \second[Optional argument given]{This is italic text}
\end{myenv}

\begin{myenv}
    \first{Bold text}{Italic text}
    \second{Optional argument omitted}
\end{myenv}

\end{document}

\second提供可选参数时,它似乎工作正常,将第一个参数输出到同一行的左侧,将第二个参数输出到右侧。但是,当未提供可选参数时,第二个参数的书写方式好像是左对齐的,而不是右对齐的(这正是我想要的)。我使用组来限制开关的效果,\raggedright但我认为我做得不对。

答案1

我不确定代码的目的是什么,但有几件事是多余的。

\documentclass{article}

\newenvironment{myenv}
    {\par\addvspace{0.1in}}
    {\par\addvspace{0.1in}}
\newcommand{\first}[2]{%
    {\raggedright\textbf{#1}\hfill\textit{#2}\par}%
}
\newcommand{\second}[2][]{%
    {\raggedright#1\hfill\textit{#2}\par}%
}

\begin{document}

\section{First section}

\begin{myenv}
    \first{This is bold text}{This is italic text}
    \second[Optional argument given]{This is italic text}
\end{myenv}

\begin{myenv}
    \first{Bold text}{Italic text}
    \second{Optional argument omitted}
\end{myenv}

\end{document}

在此处输入图片描述

请注意,这\newline是不合适的,会产生警告。但是,在我的实验中,您的代码没有显示上述错误。

相关内容