我正在尝试使用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}
代码来自这个答案我的并负责:
- 整体减少节前和节后的间距。
- 节命令之后的可选附加参数,用于减少或增加节之前或之后(或之前和之后)的跳过。
- 星号部分之前的可选参数,用作
\leftmark
答案3
您的 .sty 文件的第 796 行存在问题\leavevmode
。您可以尝试抑制它,这样可以让您的示例正常编译:
sed -e '796s/.*/\Large/' -i dgruyter_NEW.sty
(我曾经\tracingmacros=2
调试过这个)