![带有可选参数的 newcommand 定义中存在问题](https://linux22.com/image/418594/%E5%B8%A6%E6%9C%89%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0%E7%9A%84%20newcommand%20%E5%AE%9A%E4%B9%89%E4%B8%AD%E5%AD%98%E5%9C%A8%E9%97%AE%E9%A2%98.png)
我正在尝试在.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
是不合适的,会产生警告。但是,在我的实验中,您的代码没有显示上述错误。