突起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
。
结果如下:
请注意,上述解决方案是通用的:它会影响一般的突出,而不仅仅是双引号的情况。例如,这里有一些没有我的序言修改的示例,因此不会为分段启用突出:
以下是与我的序言相同的示例,以便能够突出:
(
尽管您可能不太可能以或开始一个章节标题<
,但您完全可以以A
或T
或开始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
只能在行首使用。