如何在 newcommand 中使用输入?

如何在 newcommand 中使用输入?

我想使用命令实现插入文本,该文本被包裹在一些附加标签中\input。但我得到了LaTeX Error: There's no line here to end.。如何正确执行?这是我的最小可重现示例:

style.cls - 定义命令

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{style}[Some class]
\LoadClass{report}


\newcommand{\task}[1]{  % Command for defining the text that I want to insert
  \gdef\@task{#1}
}

\newcommand{\typeTask}{  % Command to insert text into some kind of wrapper
    \begin{center}
        \MakeUppercase{task}
    \end{center}
    \vspace{4mm}
    \@task \\  % Text declared using \task command
    \vspace{4mm}
    \rule{4cm}{0.4pt}
}

main.tex - 主 tex 文件

\documentclass[a4paper,oneside,12pt]{style}
\begin{document}
\task{\input{to_include}}  % Including text from another tex file and defining as @task
\typeTask  % Inserting wrapped defined text
\end{document}

to_include.tex - 要包含的乳胶文本

Some text
\begin{enumerate}
    \item item 1
    \item another item
        \subitem and subitems
        \subitem more subitems
    \item latest item
\end{enumerate}

我想要获取对应于LaTeX文件的结果:

\documentclass[a4paper,oneside,12pt]{report}
\begin{document}
    { % Header of wrapper from style.cls
        \begin{center}
            \MakeUppercase{task}
        \end{center}
        \vspace{4mm}
    }
    { % From include file
        Some text
        \begin{enumerate}
            \item item 1
            \item another item
                \subitem and subitems
                \subitem more subitems
            \item latest item
        \end{enumerate}
    }
    { % Footer of wrapper from style.cls
        \vspace{4mm}
        \rule{4cm}{0.4pt}
    }
\end{document}

而不是错误。如何正确地做到这一点?

答案1

错误产生的原因是,\\如果没有行来结束它,它就与实际不\input相关\newcommand

你有

    \vspace{4mm}
    \@task \\  % Text declared using \task command
    \vspace{4mm}

所以如果\@task(即参数中提供的文本)已经结束了段落,这里\\就会出错。

如果\@task不结束段落(例如,如果参数是,Hello World那么您将不会得到任何错误,但会出现不受欢迎的行为,因为\\会强制换行,但以下内容 \vspace不会在该点添加空格,但在之后下列的线。

使用时几乎总是需要在空格前\vspace有一个空白行(或等效的),以进入垂直模式。\par

所以

    \vspace{4mm}
    \@task \par  % Text declared using \task command
    \vspace{4mm}

相关内容