paracol 和 KOMA:根据分页符出现奇怪的文本颜色相关行为

paracol 和 KOMA:根据分页符出现奇怪的文本颜色相关行为

最后更新(2018-05-18)

1.34 版paracol已修复此问题,现已发布加拿大运输安全局现在。

  • 我将 KOMA 文档类与该paracol包结合使用。
  • 该文件的最终目的是双语文件(两种语言,两个同步的专栏)。
  • 在我的真实文档中,我为级别的标题涂上颜色subparagraph(这里我使用红色)。\addtokomafont{子段落}{\color{红色}}
  • 我的问题是,在某些分页符情况下产生的颜色subparagraph会导致正常文本也被着色。
  • 我很难缩小问题范围并尽量减少代码:不同的分页符,问题/效果就消失了。

% Dokumentenklasse inkl. Optionen
\documentclass[
    fontsize = 12pt
    ,headings = small
    ,parskip = true
    ,numbers = noendperiod
    ,chapterprefix = true
    ]{scrbook}

%% Seitenlayout
\usepackage[
    %showframe = true,
    showframe = false,
        ]{geometry}

% Seiten-Dimensionen
\geometry{paperwidth = 300mm} % Format 16:9
\geometry{paperheight = 168.75mm} % Format 16:9
\geometry{margin = 15mm}
\geometry{marginparsep = 2mm}
\geometry{marginparwidth = 8mm}
\geometry{footskip = 14mm}

% Color Support
\usepackage{xcolor}

% paracol
\usepackage{paracol}
\setlength{\columnseprule}{1pt}
\setlength{\columnsep}{2em}

\addtokomafont{subparagraph}{\color{red}}

% http://texwelt.de/wissen/fragen/10289/wie-andere-ich-die-abstande-uberunter-section-subsection-subsubsection
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1\baselineskip,
  innerskip = 0\baselineskip]{chapter}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 0.25\baselineskip]{section}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1sp]{subparagraph}

%% Dummy-Texte
\usepackage{blindtext}

\begin{document}

\chapter{Chapter Heading}

% ### ### ###
\begin{paracol}{2}
% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph{Subparagraph Heading Left}
    % ---

    \blindtext 
    \vspace{10mm}

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}

% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right (Without Numbering)}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}
% --- --- ---
\end{paracol}
% ### ### ###

\end{document}

在此处输入图片描述


现在我编辑一行代码,例如注释\geometry{margin = 15mm},并且没有红色的普通文本:

% Dokumentenklasse inkl. Optionen
\documentclass[
    fontsize = 12pt
    ,headings = small
    ,parskip = true
    ,numbers = noendperiod
    ,chapterprefix = true
    ]{scrbook}

%% Seitenlayout
\usepackage[
    %showframe = true,
    showframe = false,
        ]{geometry}

% Seiten-Dimensionen
\geometry{paperwidth = 300mm} % Format 16:9
\geometry{paperheight = 168.75mm} % Format 16:9
%\geometry{margin = 15mm}
\geometry{marginparsep = 2mm}
\geometry{marginparwidth = 8mm}
\geometry{footskip = 14mm}

% Color Support
\usepackage{xcolor}

% paracol
\usepackage{paracol}
\setlength{\columnseprule}{1pt}
\setlength{\columnsep}{2em}

\addtokomafont{subparagraph}{\color{red}}

% http://texwelt.de/wissen/fragen/10289/wie-andere-ich-die-abstande-uberunter-section-subsection-subsubsection
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1\baselineskip,
  innerskip = 0\baselineskip]{chapter}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 0.25\baselineskip]{section}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1sp]{subparagraph}

%% Dummy-Texte
\usepackage{blindtext}

\begin{document}

\chapter{Chapter Heading}

% ### ### ###
\begin{paracol}{2}
% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph{Subparagraph Heading Left}
    % ---

    \blindtext 
    \vspace{10mm}

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}

% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right (Without Numbering)}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}
% --- --- ---
\end{paracol}
% ### ### ###

\end{document}

我知道代码不够精简,无法通过 MWE 测试。我很难提供它。

在此处输入图片描述


更新:编号子段落

我把“MWE”做得太小了:我忘了我已经编号了subparagraph。当我将David的代码合并到最初提供的示例中时,我得到了所需的行为。

当我对小段进行编号时,数字就没有颜色。

% Dokumentenklasse inkl. Optionen
\documentclass[
    fontsize = 12pt
    ,headings = small
    ,parskip = true
    ,numbers = noendperiod
    ,chapterprefix = true
    ]{scrbook}

%% Seitenlayout
\usepackage[
    %showframe = true,
    showframe = false,
        ]{geometry}

% Seiten-Dimensionen
\geometry{paperwidth = 300mm} % Format 16:9
\geometry{paperheight = 168.75mm} % Format 16:9
\geometry{margin = 15mm}
\geometry{marginparsep = 2mm}
\geometry{marginparwidth = 8mm}
\geometry{footskip = 14mm}

% Color Support
\usepackage{xcolor}

% paracol
\usepackage{paracol}
\setlength{\columnseprule}{1pt}
\setlength{\columnsep}{2em}

% subparagraph is numberes
\setcounter{secnumdepth}{5}

% Code from David
% -------------------------
\makeatletter
\def\zzz{%
\long\def\sectionlinesformat##1##2##3##4{%
\@hangfrom {\hskip ##2##3}{\textcolor{red}{##4}}}}
\makeatother

\addtokomafont{subparagraph}{\zzz}
%\addtokomafont{subparagraph}{\color{red}}
% -------------------------

% http://texwelt.de/wissen/fragen/10289/wie-andere-ich-die-abstande-uberunter-section-subsection-subsubsection
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1\baselineskip,
  innerskip = 0\baselineskip]{chapter}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 0.25\baselineskip]{section}
\RedeclareSectionCommand[
  beforeskip = 0\baselineskip,
  afterskip = 1sp]{subparagraph}

%% Dummy-Texte
\usepackage{blindtext}

\begin{document}

\chapter{Chapter Heading}

% ### ### ###
\begin{paracol}{2}
% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph{Subparagraph Heading Left}
    % ---

    \blindtext 
    \vspace{10mm}

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}

% --- --- ---
\begin{leftcolumn*}
    % --- ---
    \section{Section Heading Left}
    \subparagraph{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{leftcolumn*}
% --- --- ---

% --- --- ---
\begin{rightcolumn}
    % --- ---
    \section*{Section Heading Right (Without Numbering)}
    \subparagraph*{Subparagraph Heading Right (Without Numbering)}
    % ---

    \blindtext

    % ---
    % --- ---
\end{rightcolumn}
% --- --- ---
\end{paracol}
% ### ### ###

\end{document}

在此处输入图片描述

更新(2018-04-27)

我联系了《KOMA》的作者(马库斯·科姆,德国)以下是他所推荐内容的摘要。

  • 最好使用\sbox而不是\setbox
  • 或者 在使用 时使​​用\color@begingroup和。\color@endgroup\setbox
  • 的定义\sbox表明应该/可以如何做。
  • 在(跨越多页的疯狂盒子技巧)的情况下paracol,你需要注意颜色堆栈

我还联系了该软件包的作者paracol中島宏司,日本)。他想调查一下。

我还联系了海克·奥伯迪克,color-stack 相关软件包的作者。不过他无法详细研究它。

更新(2018-05-03)

该包的作者paracol回复了,对我来说看起来不太好:)。简而言之:对于当前版本来说,颜色是一个问题(在极少数情况下,比如我的)paracol

我调查了您的问题,发现了以下几点。(1)根本原因在于 paracol(即不在 KOMA 中)。(2)修复 paracol 中的错误极其困难,但我以后会尝试。

这里我对上述每个问题进行稍微详细的解释。

(1) 根本原因文本着色是 paracol 最棘手的实现问题之一,因为例如,我们必须为左列中一些跨页线着色,而不影响右列的着色。paracol 中的着色机制通常运行良好,但在某些特殊情况下,例如您的 MWE,它无法正确为文本着色。更具体地说,我们在以下情况下面临麻烦。 (a) 当页面空间太小而无法容纳整个行时,会给出一系列不可断行的行。在您的例子中,该序列由第 1.2 节的标题、小段的标题和普通段落的前两行组成。 (b) 该序列有彩色段落。在您的例子中,节标题和小段标题是彩色的(黑色和红色)并且是单行段落。 (c)
如果序列是可拆分的,则可以将其分成两页,第二页将以彩色段落开始。在您的例子中,TeX 会在节标题 和小段标题
之间找到分页点。
当 paracol 的着色机制看到这样的序列时,它会不恰当地在序列中插入分页点,并且误解第二页第一行(子段落标题)的着色在第一页就开始了,从而导致不正确的着色(将子段落标题后面的所有文本都染成红色)。

(2) (近乎) 完美修复 由于您遇到的问题表明 paracol 着色机制的基本思想不合适,因此修复该错误需要完全重新设计该机制,即使这是可能的。我有一个修复想法,并将检查其可行性,但我不能确定何时,甚至是否,该修复会被纳入 paracol 的未来版本中。

更新(2018-05-08)

该软件包的作者paracol生成了一个新版本 (1.34),将在未来几周内公开发布。我现在有机会用我当前的实际文档对其进行测试:它在我当前的文档中有效!

最后更新(2018-05-18)

1.34 版paracol已修复此问题,现已发布加拿大运输安全局现在。

答案1

pdftex 会警告你

pdfTeX warning: pdflatex: pop empty color page stack 0

如果你将定义改为

\makeatletter
\def\zzz{%
\long\def\sectionlinesformat##1##2##3##4{%
\@hangfrom {\hskip ##2##3}{\textcolor{red}{##4}}}}
\makeatother


\addtokomafont{subparagraph}{\zzz}

然后红色停留在标题中,没有任何堆栈已损坏的警告。间接定义\textcolor 在标题文本周围插入而不会干扰标题布局代码。

相关内容