买者自负...

买者自负...

突起microtype在我的星号(未编号)标题中不起作用section。我感觉这可能是microtype处理不同类型环境的起始行时出现的一般错误的一部分。所以我尝试了这个:https://tex.stackexchange.com/a/13711/75284它定义了一个自定义protrudeleft命令。然而,将它应用到我的 MWE 却给了我神秘的错误,而且没有突出效果。

\documentclass[a5paper,10pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[showframe]{geometry}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[protrusion=true,factor=3500]{microtype}

\begin{document}
\section*{“Section* Title}
\noindent “Body Text
\end{document}

平均能量损失

答案1

我瞎折腾了……我不知道自己在干什么。如果这严重破坏了你的文档,你可以把所有碎片留给自己。如果代码与你的猫合作订购新的开罐器或无聊时拨打电话订购披萨,我不承担任何责任。

买者自负...

我认为,基本问题是启动章节、子章节、子子章节和段落的代码的定义。以下代码“修复”了这些命令的带星号和不带星号版本的问题。

如果您自定义部分格式、使用非标准类或以其他方式进行奇怪而奇妙的事情,则这不太可能起作用。(也许可以。但可能不会。)

从理论上讲,应该可以\@section...直接重新定义例如等,但修复方法不适用于例如titlesec

这就是说:

\documentclass[a5paper,10pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[showframe]{geometry}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[protrusion=true,factor=3000]{microtype}

\makeatletter
\def\@ssect#1#2#3#4#5{% modified from latex.ltx - for starred sections below chapter level
  \@tempskipa #3\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #4{%
        \interlinepenalty \@M \noindent #5\@@par}%
    \endgroup
  \else
    \def\@svsechd{#4{%
        \cfr@microfix@sec{#1}#5}}%
  \fi
  \@xsect{#3}}
\def\@sect#1#2#3#4#5#6[#7]#8{% modified from latex.ltx - for unstarred sections below chapter level
  \ifnum #2>\c@secnumdepth
    \let\@svsec\@empty
  \else
    \refstepcounter{#1}%
    \protected@edef\@svsec{\@seccntformat{#1}\relax}%
  \fi
  \@tempskipa #5\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #6{%
        \@hangfrom{\cfr@microfix@sec{#3}\@svsec}%
          \interlinepenalty \@M #8\@@par}%
    \endgroup
    \csname #1mark\endcsname{#7}%
    \addcontentsline{toc}{#1}{%
      \ifnum #2>\c@secnumdepth \else
        \protect\numberline{\csname the#1\endcsname}%
      \fi
      #7}%
  \else
    \def\@svsechd{%
      #6{\cfr@microfix@sec{#3}%
      \@svsec #8}%
      \csname #1mark\endcsname{#7}%
      \addcontentsline{toc}{#1}{%
        \ifnum #2>\c@secnumdepth \else
          \protect\numberline{\csname the#1\endcsname}%
        \fi
        #7}}%
  \fi
  \@xsect{#5}}
\newcommand*\cfr@microfix@sec[1]{%
  \ifdim#1=0pt
    \noindent
  \else
    \hskip #1\relax
  \fi}
\makeatother

\begin{document}
\chapter{``Charlie}
\chapter*{``Charlie}
\section{Charlie nss}
\noindent {\Large\bfseries 1.1}
\section*{``Charlie ss}
\subsection{Charlie nsss}
\subsection*{``Charlie sss}
\subsubsection{``Charlie nsss}
\subsubsection*{``Charlie ssss}

\paragraph{``Charlie np} paragraph

\paragraph*{``Charlie sp} paragraph

\subparagraph{``Charlie nsp} subparagraph

\subparagraph*{``Charlie ssp} subparagraph

\noindent{\Large\bfseries``Charlie\par}
\noindent ``Charlie
\end{document}

请注意,上面的代码\chapter*是为了进行比较而包含的,因为它是开箱即用的,这就是我将类切换为的原因book

结果如下:

查理

请注意,上述解决方案是通用的:它会影响一般的突出,而不仅仅是双引号的情况。例如,这里有一些没有我的序言修改的示例,因此不会为分段启用突出:

无突出

以下是与我的序言相同的示例,以便能够突出:

有突出部分

(尽管您可能不太可能以或开始一个章节标题<,但您完全可以以AT或开始V或其他定义了突起的字母开头。这里的突起效果更微妙,即使像这里一样夸张,但这当然是微排版的本质:改进是应该变得微妙 ;)。

W以下是未经修改的比较:

没有

与:

和

当然,效果被 3000 的突出系数夸大了。这是前一对图像的特写,其中设置了标准突出设置(对于此字体,如果可用)。首先使用标准切片命令:

标准切片

第二个重新定义的版本:

重新定义切片

所以我认为一些一般的这里需要解决方案,即使我的尝试被证明是不合适的;)。

答案2

的内部代码\section阻止了突出部分的工作(它插入了一个带有跳过和的框\noindent)。在\protrudeleft我看来,您链接到的问题中的命令在这里不起作用,因为它隐式地假设它是在垂直模式下使用的。

您可以使用以下代码获取突起。

注意力

这不是“通用”代码。它假设 的\textquotedblleft定义与定义相同(并扩展为字符数)。我没有针对其他编码进行测试。

\documentclass[a5paper,10pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[showframe]{geometry}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[protrusion=true,factor=3500]{microtype}

\DeclareRobustCommand\protrudedleftquote{%
 \kern-\dimexpr\lpcode\font\textquotedblleft em/1000\relax \textquotedblleft}
 \begin{document}

\section*{“Section* Title}

\section*{\protrudedleftquote Section* Title}

“Body Text

\end{document}

在此处输入图片描述

\DeclareUnicodeCharacter{201C}{\protrudedleftquote}按照编辑的建议,用“替换”的标准定义是不是这是一个好主意,因为它会在每个引号前添加负空格,从而打破正在运行的文本中的引号。该命令\protrudedleftquote只能在行首使用。

相关内容