使用 dgruyter 风格的 titlesec 包会出现“错误:以水平模式进入”

使用 dgruyter 风格的 titlesec 包会出现“错误:以水平模式进入”

我正在尝试使用titlesec采用 dgruyter 风格的包这一页,然后出现编译错误“错误:以水平模式进入。” 关于这个错误已经存在许多问题,但似乎没有一个答案适用:这个错误通常出现在使用包命令时,例如参数数量错误,在这里,无论我使用哪个命令,即使我不使用任何命令,编译仍然会失败。

重现步骤:

  • 下载波佩茨
  • 解压缩:unzip popets.zip && cd popets
  • 在目录中,创建一个新文件repro.tex
  • 修复错误这里提到sed -e '/ngerman/ s/^%*/%/' -i dgruyter_NEW.sty
\documentclass[USenglish,oneside,twocolumn]{article}
\usepackage[utf8]{inputenc}
\usepackage[big]{dgruyter_NEW}
\usepackage[compact]{titlesec}

\begin{document}
\section{section}
content
\end{document}
  • 尝试编译它:pdflatex repro。这将返回错误! Package titlesec Error: Entered in horizontal mode.

我应该尝试删除或修改文件的哪一部分.sty来解决这个问题?或者,有没有一种方法可以减少标题前/后的间距,而不涉及包titlesec?(这就是我想要做的。)

答案1

dgruyter_NEW实际上并不兼容titlesec,除了提交给 DeGruyter 期刊外,不应使用它:在这种情况下,不应修改外观。

还要记住的dgruyter_NEW非常危险设置,这可能会引发奇怪的错误。

如果您愿意冒着稿件被拒绝的风险,您可以\section在加载之前进行修补titlesec

\documentclass[USenglish,oneside,twocolumn]{article}
\usepackage[utf8]{inputenc}
\usepackage[big]{dgruyter_NEW}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\section}
  {\leavevmode\vrule\@width\z@\@height\dimexpr\topskip+6.5\p@\relax\@depth\z@}
  {}
  {}{}
\makeatother

\usepackage[compact]{titlesec}

\begin{document}
\section{section}
content
\end{document}

答案2

\section这是减少命令前后空格的另一种方法

\documentclass[USenglish,oneside,twocolumn]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgffor}
\usepackage{fancyhdr}
\usepackage{lipsum}
%\usepackage[big]{dgruyter_NEW}
%\usepackage[compact]{titlesec}

\newlength{\myaboveextraskip}
\newlength{\mybelowextraskip}

\setlength{\myaboveextraskip}{-4.7mm}
\setlength{\mybelowextraskip}{-3.5mm}

\let\oldsection\section
\let\oldleftmark\leftmark

\gdef\myaboveskip{\vspace*{\myaboveextraskip}}
\gdef\mybelowskip{\vspace*{\mybelowextraskip}}


\def\ExtraSkips#1{%
\let\oldmyaboveskip\myaboveskip%
\let\oldmybelowskip\mybelowskip%
\foreach \arg[count =\i from 1] in {#1}
{%
\ifnum\i=1
\xdef\tempdist{\dimexpr\myaboveextraskip+\arg}
\global\def\myaboveskip{\vspace*{\tempdist}}%
\else
\xdef\tempdist{\dimexpr\mybelowextraskip+\arg}
\global\def\mybelowskip{\vspace*{\tempdist}}%
\fi
}%
}

\def\OldSkips{%
\let\myaboveskip\oldmyaboveskip%
\let\mybelowskip\oldmybelowskip%
}



\makeatletter
\def\section{%
\@ifstar{\StarredSection}{\NonStarredSection}%
}
\def\StarredSection{%
\@ifnextchar[
{\StarredSectionWith}%
{\StarredSectionWithout}%
}
\def\NonStarredSection{%
\@ifnextchar[
{\NonStarredSectionWith}%
{\NonStarredSectionWithout}%
}
\def\StarredSectionWith[#1]#2{%
\@ifnextchar[
{\StarredSectionWithWith[#1]#2}%
{\StarredSectionWithWithout[#1]{#2}}%
}
\def\StarredSectionWithout#1{%
\@ifnextchar[
{\StarredSectionWithoutWith#1}%
{\StarredSectionWithoutWithout{#1}}%
}
\def\NonStarredSectionWith[#1]#2{%
\@ifnextchar[
{\NonStarredSectionWithWith[#1]#2}%
{\NonStarredSectionWithWithout[#1]{#2}}%
}
\def\NonStarredSectionWithout#1{%
\@ifnextchar[
{\NonStarredSectionWithoutWith#1}%
{\NonStarredSectionWithoutWithout{#1}}%
}
\def\StarredSectionWithWith[#1]#2[#3]{%
\ExtraSkips{#3}%
\myaboveextraskip%
\let\oldleftmark\leftmark%
\renewcommand{\leftmark}{#1}%
\oldsection*{#2}%
\mybelowskip%
\OldSkips%
}
\def\StarredSectionWithoutWith#1[#2]{%
\let\leftmark\oldleftmark%
\ExtraSkips{#2}
\myaboveskip%
\oldsection*{#1}
\mybelowskip%
}
\def\StarredSectionWithWithout[#1]#2{%
\myaboveskip%
\let\oldleftmark\leftmark%
\renewcommand{\leftmark}{#1}
\oldsection*{#2}
\mybelowskip%
}
\def\StarredSectionWithoutWithout#1{%
\let\leftmark\oldleftmark%
\myaboveskip%
\oldsection*{#1}
\mybelowskip%
}
\def\NonStarredSectionWithWith[#1]#2[#3]{%
\let\leftmark\oldleftmark%
\ExtraSkips{#3}
\myaboveskip%
\oldsection[#1]{#2}
\mybelowskip%
\OldSkips%
}
\def\NonStarredSectionWithoutWith#1[#2]{%
\let\leftmark\oldleftmark%
\ExtraSkips{#2}
\myaboveskip%
\oldsection{#1}
\mybelowskip%
\OldSkips%
}
\def\NonStarredSectionWithWithout[#1]#2{%
\let\leftmark\oldleftmark%
\myaboveskip%
\oldsection[#1]{#2}
\mybelowskip%
}
\def\NonStarredSectionWithoutWithout#1{%
\let\leftmark\oldleftmark%
\myaboveskip%
\oldsection{#1}
\mybelowskip%
}



\begin{document}
\pagestyle{fancy}
\tableofcontents
\section{section A}
\lipsum[1-2]
\section*{section B}
\lipsum[1-3]
\section[test C]{section C}
\lipsum[1-2]
\section*[test D]{section D}
\lipsum[1-3]
\section{section E}[0.5cm,10mm]
\lipsum[1-2]
\section*{section F}
\lipsum[1-3]
\section[test G]{section G}[-3mm]
\lipsum[1-2]
\section*[test H]{section H}
\lipsum[1-5]
\section*{section I}
\lipsum[1-5]
\end{document}

代码来自这个答案我的并负责:

  1. 整体减少节前和节后的间距。
  2. 节命令之后的可选附加参数,用于减少或增加节之前或之后(或之前和之后)的跳过。
  3. 星号部分之前的可选参数,用作\leftmark

答案3

您的 .sty 文件的第 796 行存在问题\leavevmode。您可以尝试抑制它,这样可以让您的示例正常编译:

sed -e '796s/.*/\Large/' -i dgruyter_NEW.sty

(我曾经\tracingmacros=2调试过这个)

相关内容