我想使用命令实现插入文本,该文本被包裹在一些附加标签中\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}