! LaTeX 错误:控制序列 \sep:已定义

! LaTeX 错误:控制序列 \sep:已定义

我需要将使用 CAS-DC Elsevier 模板编写的几篇研究论文合并到单个 .pdf 文件中,每篇研究论文中都有参考书目,整个 .pdf 文档都有连续的页码。最小工作示例如下:我需要将几篇研究论文合并成一个 .pdf 文件

我尝试了 confproc、combine、pdfpages 和 subfiles、docmute 包。无论使用哪种包,在编译主文档时我总是看到相同的错误:

! LaTeX 错误:控制序列 \sep:已定义。

在编译的主文档中,我看到标题、作者、附属机构等的重复。例如:在第二篇研究论文的主文件中,有来自第一篇研究论文的标题、作者、附属机构、电子邮件 ORCID 等。

这与连接无关,我需要借助 LaTex(MiKTeX、TeXstudio)来解决问题。

非常感谢您的所有建议。提前谢谢您。

答案1

关键字 environment 的定义cas-common.sty

\NewDocumentEnvironment { keywords } { O{ Keywords } }
   {
     \tex_global:D \tex_setbox:D \g_stm_key_box = \vtop \bgroup
     \hsize=.25 \textwidth
     \cs_new:Nn \sep: { \par }
     \cs_set_eq:NN \sep \sep:
     \parindent \z@
     A\,R\,T\,I\,C\,L\,E\ \ I\,N\,F\,O \par \skip_vertical:n { -3pt }
     \rule{.25 \textwidth}{.2pt}\par\footnotesize
     \noindent \textit { #1 }:  \par
   }
   { \egroup }

很难对这段代码说任何友好的话,这是一种 tex-latex-expl3 洋泾浜语。

无论如何,问题出在 (useless) 上\cs_new:Nn。在环境定义中,永远不要使用此命令。

您可以通过重新定义环境来避免错误(这并不会使情况变得更好,它只能避免错误):

\documentclass[a4paper,fleqn,twoside]{cas-dc}

\ExplSyntaxOn\makeatletter
\RenewDocumentEnvironment { keywords } { O{ Keywords } }
   {
     \tex_global:D \tex_setbox:D \g_stm_key_box = \vtop \bgroup
     \hsize=.25 \textwidth
     %\cs_new:Nn \sep: { \par } % removed
     \def\sep{\par}             % \cs_set_eq:NN \sep \sep:
     \parindent \z@
     A\,R\,T\,I\,C\,L\,E\ \ I\,N\,F\,O \par \skip_vertical:n { -3pt }
     \rule{.25 \textwidth}{.2pt}\par\footnotesize
     \noindent \textit { #1 }:  \par
   }
   { \egroup }

\ExplSyntaxOff\makeatother

答案2

好的,这是我的初步分析结果。

第一种方法

目标:让你的文件编译。

在此过程中,我MikTeX console要求安装一些缺失的文件,包括 cas-dc.cls 。

更改标记为 后,% <<< !!我终于可以进行main.tex编译了(只有第一个 subfile() 调用处于活动状态)。 按照sub1.tex上述方法更改后,两个文件都可以单独编译,这是理所当然的。

尽管有警告,但\sep error并没有出现。

主文本

% 
% 

\documentclass[a4paper,fleqn,twoside]{cas-dc}
\usepackage{subfiles}

\usepackage[numbers]{natbib}

\usepackage[T1,T2A]{fontenc}
\usepackage[utf8,]{inputenc}
%\usepackage{tempora}
%\usepackage{XCharter}
\usepackage{textcomp}
\usepackage[russian,ukrainian,romanian,english]{babel}
%\usepackage[dvipsnames,x11names]{xcolor}
\renewcommand{\rmdefault}{ftm}
\usepackage{yfonts}
\usepackage{multicol}

\usepackage{lineno,hyperref}
%\modulolinenumbers[5]
\usepackage{amsmath,amsfonts,amssymb,amsthm,mathtools,enumerate,float}

\sloppy

\makeatletter
\def\ps@first{%
\let\@oddhead\@empty
\let\@evenhead\@empty
\def\@oddfoot{}
\let\@evenfoot\@oddfoot
}

\usepackage{wrapfig}
\usepackage{graphicx}
\renewcommand{\rmdefault}{cmr}
\renewcommand{\sfdefault}{cmss}
\renewcommand{\ttdefault}{cmtt}
%\renewcommand{\rmdefault}{cmss}
\renewcommand{\ttdefault}{cmss}


%\DeclareFontSubstitution{T2A}{cmr}{m}{n}
%\DeclareSymbolFont{T2Aletters}{T2A}{cmr}{m}{it}
\usepackage{geometry}
\renewcommand{\theenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\theenumii}{.\arabic{enumii}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}.}% Меняем везде перечисления на цифра.цифра
\renewcommand{\theenumiii}{.\arabic{enumiii}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.}% Меняем везде перечисления на цифра.цифра

\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{}
\fancyhead[LE,RO]{\thepage}
\fancyhead[CO]{ }
%\fancyhead[LO] {}
\fancyhead[CE]{ }
%\fancyhead[RE] { }
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0.5pt}

\fancyfoot[C]{}%}}  % <<< !!

{
\fancyfootoffset[R]{-12cm}
\fancyfoot[L]{}
\fancyfoot[C]{}
\fancyfoot[R]{}
\renewcommand{\footrulewidth}{0.3 mm}
\renewcommand{\headrulewidth}{0.3 mm}
}
\setlength{\voffset}{-10mm}
\setlength{\topmargin}{0mm}
\setlength{\headheight}{5mm}
\setlength{\headsep}{5mm}
\setlength{\footskip}{6mm}


%\newcommand{\l@abcd}[2]{\hbox to\textwidth{#1\dotfill #2}}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\BR@backref}{\newblock}{\newblock(page~}{}{}
\patchcmd{\BR@backref}{\par}{)\par}{}{}
\makeatother

\usepackage[]{notes2bib}
\usepackage[nottoc]{tocbibind}

\usepackage[colorlinks]{hyperref}
%\hypersetup{pdffitwindow=true,linkcolor=LightSkyBlue,citecolor=Sienna,urlcolor=Navy,menucolor=black}
\hypersetup{
colorlinks=true,
linkcolor=magenta,
filecolor=blue,
urlcolor=blue,
citecolor=green,
anchorcolor=blue,
menucolor=blue,
backref=false,
backref=page,
pdfpagemode=UseNone,
pdfstartview=}
\RequirePackage[hyperpageref]{backref} 
\renewcommand*{\backref}[1]{}  
\renewcommand*{\backrefalt}[4]{
\ifcase #1 
No cited.
\or
Cited on page #2.
\else
Cited on pages #2.
\fi}


\begin{document}

\subfile{sub1} % <<< !!

\subfile{sub2} % <<< !! (not used in 1st approach)

\end{document}

sub1.tex,部分内容缺失(图像)或不清晰(\maketitle):

%\documentclass[document]{subfiles}
\documentclass[main]{subfiles} % <<< !!

\begin{document}

\title [mode = title]{ }

\tnotemark[1]
\tnotetext[1]{Research Paper}
\tnotetext[1]{This document is the result of blood, sweat, tears and taxpayer money.}
\nonumnote{This note has no numbers. In this work we demonstrate $a_b$
the formation Y\_1 of a new type of polariton on the interface
between a cuprous oxide slab and a polystyrene micro-sphere placed
on the slab.}

\credit{Conceptualization of this study, Methodology, Software}


\author[2]{ }
[orcid=https://orcid.org/]
\cormark[2]
\fnmark[2]
\fntext[fn2]{ }

\ead{[email protected]}
\ead[URL]{www. }%

% Address/affiliation
\affiliation[2]{organization={National Scientific Center «Hon. Prof. M. S. Bokarius Forensic Science Institute»},
addressline={ },
city={ },
country={ }}
\credit{ }

\begin{abstract}
Abstract Text
\end{abstract}

\begin{keywords}
keywords
\vspace*{0.5\baselineskip}
\textbf{Article history:}\\ Received: 30.09.2021\\ Received in revised form: 19.12.2021 \\Accepted: 9.01.2022 \\Available online: 11.01.2022
\end{keywords}

%\maketitle % <<< !!


\section{ }
Text

\section{ }
text
\section{ } 
Text
\section{Conclusions} 
Text 

\section{Conclusions} 

Text 
\subsection{Acknowledgements} 

Text 

%\bio{{figs/image1}} % <<< !!
Author biography with author photo.
%\end{multicols} % <<< !!
\end{document}

第二种方法

如何激发\sep errors?让我们尝试包含第二个文件:

  • 包括sub1.tex做了(!)
  • 将 sub1.tex 修改为稍微改变的sub2.tex版本 (!)

笔记:

  • 包含两个不同的子文件main

  • sub1进展顺利,

  • 编译时导致sub2错误main.tex

    ! LaTeX 错误:控制序列 \sep:已定义。如需立即帮助,请键入 H . ... l.44 \end {keywords}

那么,它在哪里?

我通过以下方式证明:

  • 注释掉整个关键字环境(无错误)
  • 仅允许\begin \end语句(错误)

它在这里:

% <<< !!!
\begin{keywords}
%keywords
%\vspace*{0.5\baselineskip}
%\textbf{Article history:}\\ Received: 30.09.2021\\ Received in revised form: 19.12.2021 \\Accepted: 9.01.2022 \\Available online: 11.01.2022
\end{keywords}

您可能需要\renewenvironment关键字环境,或者类似的操作。

结论

在这种情况下,代码的逐步增强就足以导致错误。阅读错误消息可以很容易地找到问题制造者:环境。

也许某个熟记该cas-dc.cls课程的人可以为您提供治疗。

但是,还有一些工作要做,例如调整计数器,正如没有麻烦制造者生成的 main.pdf 所示:

主页.pdf

相关内容