
某天帮学弟调一个期刊模板编译完第一眼我就愣住了作者那一栏灰扑扑的像是没渲染出来再往下翻二级标题、三级标题全都斜着正经期刊模板怎么会搞出这种效果查了半天灰是模板自带的匿名审稿模式把作者名渲染成了灰色斜体是一个titlesec配置把标题设成了\itshape。两个现象凑在一起看着就像模板被谁动过手脚。这类问题在LaTeX里特别典型因为它们都不是你写在正文里的内容出了问题而是文档类、宏包在暗地里帮你做了样式决定。作者名字是黑是灰标题是粗还是斜普通用户以为改一下\textbf就能搞定实际上多数时候得去查模板和宏包的行为。这篇就把这两个症状拆开来讲先说怎么定位根因再给可以直接抄走的修复方案最后把主动改成灰色、斜体的反向操作也一并说清楚。正在写论文投稿的人、给毕业论文模板折腾样式的人、接定制模板私活的人都能从中找到对应的部分。1. 作者名字发灰先从“是不是链接颜色”查起1.1 最常见的来源hyperref给链接上了色作者名字变灰概率最高的一种情况是作者栏里写了类似这样的一段。\author{\href{mailto:zhangsanexample.com}{张三}}只要导言区加载了hyperref宏包默认情况下带有链接的文本会显示成一种颜色。很多人以为链接一定是蓝色的其实不一定。hyperref在colorlinkstrue的时候会给三类文本分别着色linkcolor控制内部引用颜色citecolor控制参考文献引用颜色urlcolor控制URL和邮件链接颜色。不同模板、不同用户设置的色值不一样有些模板直接把urlcolor定义成灰色作者名自然就灰了。判断方法也简单把鼠标移到作者名字上如果指针变成手型或者PDF阅读器状态栏弹出邮箱地址那基本可以断定是超链接着色。在TeXstudio里悬停还会直接显示链接目标。解决这类灰也很直接加一行\hypersetup{hidelinks}hidelinks的效果是链接依然可点但不显示颜色、不加边框在视觉上和普通文字完全一致。如果你只是想保留其他链接的颜色、只让作者名字恢复黑色那就明确指定颜色\hypersetup{colorlinkstrue, linkcolorblack, urlcolorblack, citecolorblack}这里要顺带提一个经验\href{mailto:...}{...}和\url{...}行为不一样。\url会自动改成等宽字体并产生链接\href则是在你指定的文字外面包一层链接。想让作者栏看起来干净统一用\href包文字比直接甩一个完整邮箱地址要美观得多。1.2 匿名审稿模式模板把作者名故意涂灰如果一个最小示例里作者名不是灰色但换到目标期刊模板就灰了问题多半出在模板自身。很多期刊模板都内置了匿名审稿功能。比如acmart文档类带一个anonymous选项投盲审稿的时候要求作者把姓名隐藏模板就会把作者名替换成“Anonymous Author(s)”并渲染成灰色或者浅色占位符。Springer、IEEE旗下的一些模板也有类似设计。这类灰色不是错误而是模板在提示你“这个位置的内容不会出现在审稿人看到的版本里”。解决办法不是去改颜色而是先看文档类选项\documentclass[anonymous]{acmart}把anonymous去掉作者名通常就恢复正常了。如果你觉得占位符太碍眼也可以直接在\author{真实姓名}的位置写自己的名字编译后自然就不再是灰色。还有一类情况是模板在.cls文件里对\maketitle做了自定义把\author用\textcolor{gray}包了一层。这种情况要去.cls里搜gray、\author、\maketitle这几个关键词找到对应位置。比如有人见过这样的写法\renewcommand{\maketitle}{% {\LARGE \bfseries \title \par}% {\large \textcolor{gray}{\author} \par}% }如果模板不允许改动比如投稿时必须保持原样那就别硬改.cls可以在正文导言区重新定义\maketitle覆盖它方法我放到后面第五节。1.3 防止误判PDF渲染器和预览器也可能“造假”排查之前先确认你看的到底是不是真正的PDF颜色。这个坑我踩过不止一次。Overleaf在线编译时如果PDF比较大预览区会先以灰色占位渲染等字体加载好之后才变黑。我在电脑本地用TeXstudio预览时也遇到过类似情况尤其老式DVI阅读器对超链接的支持有问题会把所有链接统一渲染成灰色。判断方法是把这个PDF下载下来用Adobe Acrobat或者系统自带的预览工具打开看颜色是否还是灰的。如果只是预览器显示问题那就不用动任何代码关掉重开或者等渲染完成就行。为了排除这种干扰我通常会在修改样式之前先编译出一个带作者栏的最小示例同时打开两份PDF对比一份本地、一份在线确认颜色差异是真实存在的再动preamble里的代码。2. 二级三级标题为什么斜了模板默认值和titlesec的干预2.1 默认情况下LaTeX标题应该长什么样先说结论标准article文档类里二级标题\subsection的默认格式是\large\bfseries三级标题\subsubsection是\normalsize\bfseries。也就是说默认状态下的标题是加粗的正体没有斜体这一说。命令默认字号与字形\section\Large\bfseries\subsection\large\bfseries\subsubsection\normalsize\bfseries所以当二级、三级标题出现斜体时一定有什么地方覆盖了默认定义。最常见的“嫌疑人”有三个模板里的\startsection重定义、titlesec宏包的\titleformat、以及你自己或者模板在标题参数里写了\textit、\itshape这类命令。2.2 斜体到底是从哪里冒出来的第一类来源是模板的.cls文件。很多出版社模板为了做出特殊视觉效果会在.cls里重新定义章节命令。比如一个期刊要求二级标题用“粗斜体”以突出层级模板就会写成\renewcommand\subsection{\startsection{subsection}{2}{\z}% {-3.25ex\plus -1ex \minus -.2ex}% {1.5ex \plus .2ex}% {\normalfont\large\bfseries\itshape}}这个\itshape就是斜体的来源。你如果在正文里写\subsection{xxx}编译结果自然就是斜体。这种情况下你改正文没有任何用因为格式是在命令定义层面被写死的。第二类来源是titlesec宏包。如果你或模板作者用了titlesec那么一个简单的设置就能让标题全体斜体\titleformat{\subsection}{\large\itshape}{\thesubsection}{1em}{}titlesec是控制标题样式的标准方案格式里写入\itshape二级标题就变成斜体写入\bfseries\itshape就是粗斜体。很多模板为了“好看”会在这里做手脚而使用者往往不知道要去检查这一行。第三类来源更隐蔽——标题文字本身被写成了斜体。比如有人写\subsection{\textit{实验结果与分析}}这里的斜体只作用于标题文字标题编号还是正体。如果模板里又恰好有\bfseries等设置最终效果可能是“正体编号斜体文字”看起来比整体斜体还要奇怪。2.3 中文环境下的“假斜体”现象如果你用的是ctexart、ctexrep这类中文文档类情况会更复杂一点。中文本身没有西文意义上的斜体\textit作用于中文字符时通常会被替换成楷体或者仿宋这类手写风格字体。所以在中文文档里看到二级标题“斜了”很多时候是模板设置了楷体字而不是真正的倾斜字形。处理这类“看起来斜”的问题不能只看有没有\itshape还要检查有没有\kaishu、\fangsong这样的中文字体命令。有时候\bfseries\kaishu的组合在屏幕上就很像斜体尤其是字比较小的时候。也有读者会问既然默认不是斜体那为什么有人说二级、三级标题本来就该斜体这大概是早期LaTeX模板和Word模板互相影响留下的印象。一些老式Word模板确实会把标题层级设为斜体但LaTeX默认并没有这种约定很多期刊也明确要求标题不用斜体。碰到模板里预设了斜体你完全可以理直气壮地改掉。2.4 别忘了标题编号本身可能也是斜体还有一种特殊情况标题文字是正体但编号是斜体。比如模板里重新定义了章节编号的显示方式\renewcommand{\thesubsection}{\textit{\arabic{section}.\arabic{subsection}}}\thesubsection决定了编号在标题中的显示内容把\textit写在这里编号就会一直以斜体出现不管\titleformat怎么设标题文本。这种问题的修复方式是把\thesubsection的斜体去掉恢复成普通数字\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}判断是不是这个原因可以单独把某个标题编号放大看或者临时把\thesubsection改成纯数字编译一次对比效果。3. 一个最小示例同时复现两个“灵异现象”3.1 构造完整的复现代码排查这类问题最忌讳的就是直接在几十页的大论文里翻来翻去。我习惯的做法是先提取一个最小示例让它稳定复现症状再在最小示例里做修改验证。下面这段代码可以同时复现“作者名变灰”和“二三级标题斜体”两个现象需要xelatex编译。% !TEX program xelatex \documentclass{article} \usepackage[UTF8]{ctex} \usepackage{xcolor} \usepackage[colorlinkstrue, urlcolorgray]{hyperref} \usepackage{titlesec} % 模拟模板把二级三级标题设置成斜体 \titleformat{\subsection}{\large\itshape\bfseries}{\thesubsection}{1em}{} \titleformat{\subsubsection}{\normalsize\itshape}{\thesubsubsection}{1em}{} \title{一个最小复现示例} \author{\href{mailto:zhangsanexample.com}{张三}} \date{} \begin{document} \maketitle \section{一级标题} \subsection{二级标题} \subsubsection{三级标题} 这里是正文内容。 \end{document}编译之后你会看到作者“张三”显示为灰色二级标题、三级标题都是斜体。这两行titlesec就是模拟模板对标题的干预第三行的urlcolorgray则负责把作者名字变成灰色。如果换一个环境比如期刊模板只要把这两段设置替换成模板里实际的代码同样可以精确复现模板下的问题。3.2 验证灰色来源的具体步骤有了最小示例验证根因就很快了。第一步注释掉导言区里的\hypersetup相关代码也就是把[colorlinkstrue, urlcolorgray]这个选项暂时删掉重新编译。如果作者名字恢复黑色说明灰色来自hyperref的链接颜色设置。这时候回到真实文档里去作者栏找\href、\url这类命令再对照模板或自己的\hypersetup颜色配置就能定位到根源。如果注释掉hyperref之后名字依然是灰色那就要检查.cls模板文件在模板源码里搜索\author和\maketitle附近是否使用了\color、\textcolor、gray这类字眼。第二步很重要确认作者名到底还是不是一个链接。如果懒得写测试代码就直接在PDF里把鼠标悬停在名字上。如果没有手型指针那大概率不是hyperref的问题而是模板对\maketitle做了着色处理。这两种情况的修复方向完全不同一个改宏包配置一个改标题定义先分清才能少走弯路。3.3 确认标题斜体来自哪一个设置标题斜体的排查同理。在最小示例里逐行注释titlesec的\titleformat比如先注释二级标题那一行%\titleformat{\subsection}{\large\itshape\bfseries}{\thesubsection}{1em}{}如果二级标题不再斜体说明就是这一行的问题。再注释三级标题那一行验证三级标题是否独立受控。正常情况下每一级标题的\titleformat都是独立的改一级不会影响另一级。但是回到真实的期刊模板中有可能两级标题共用了一个自定义命令。比如模板在.cls里定义了\sectionformat然后在\startsection里统一调用。这时候二级和三级标题会同时受影响只改documents里的某一行可能无效。遇到这种情况建议在.cls文件里搜索你看到的\itshape、\slshape、\em这几个命令看它们出现在哪个命令定义里再去理清依赖关系。4. 修复方法hidelinks接住链接色titlesec带走斜体4.1 第一种方案直接禁用链接颜色如果是链接着色导致的作者名灰色最简单的修复就是在hyperref加载后加上\usepackage{hyperref} \hypersetup{hidelinks}这样所有链接都会显示为普通文字颜色不再有彩色和边框。它的好处是“一刀切”内部引用、页内目录、参考文献链接全部回归黑色观感非常统一。缺点是如果你希望某些链接保留颜色提示这个方案就不适用了。另一种更精细的写法是区分不同链接的颜色\hypersetup{ colorlinkstrue, linkcolorblack, citecolorblack, urlcolorblack }linkcolor管内部交叉引用和目录条目citecolor管参考文献上标引用urlcolor管URL和mailto邮件链接。全部设成black之后作者栏不再是灰色文档里的其他链接也全部变成黑色但链接本身仍然是可点击的。还有一种情况值得留意如果你的模板设置了colorlinksfalse那链接不会变色但会在PDF里出现一个彩色边框打印出来通常是一个难看的方框。如果作者名灰不是颜色问题而是边框问题用hidelinks也能一并解决。这里有个经验投稿前最后检查一下作者栏别让邮箱链接带着一个灰框出现在PDF里编辑看到会觉得你连模板都没摸熟。4.2 第二种方案恢复二三级标题的正体处理标题斜体最正规的工具就是titlesec。首先说一下titlesec的\titleformat命令格式很多人只会复制粘贴不知道每个参数什么意思遇到要调的时候就抓瞎。\titleformat{命令}[形状]{格式}{标签}{标签与标题之间的间距}{标题文本的前置代码}[标题后代码]五个核心参数分别对应章节命令、标题整体格式字号、字重、字形、编号的显示格式、编号与标题文字之间的水平距离、标题文字的额外格式。想要二级标题恢复为常规粗体正体写法是\titleformat{\subsection}{\large\bfseries}{\thesubsection}{1em}{}三级标题对应\titleformat{\subsubsection}{\normalsize\bfseries}{\thesubsubsection}{1em}{}把这两行放到导言区覆盖模板原来的设置即可。如果不喜欢titlesec也可以回到\startsection手动定义但那需要从.cls里复制完整的定义再改参数多、容易错并不推荐。如果你的模板定义了编号格式比如\thesubsection里带了斜体那还要单独处理一下编号定义\renewcommand{\thesubsection}{\arabic{section}.\arabic{subsection}}不然标题文字恢复正体编号却还斜着一眼就能看出来不协调。4.3 只想保留部分斜体编号正体、文字斜体怎么设也有的人不是想完全去掉斜体而是想保留一种“编号正体、标题文字斜体”的层叠效果。这在著作类排版里比较常见实现逻辑也正好能检验你对titlesec参数的理解。titlesec的第五个参数是标题文本的前置代码只作用于标题文字本身不影响编号。所以这样写\titleformat{\subsection}{\large\bfseries}{\thesubsection}{1em}{\itshape}效果就是二级标题的编号保持粗体正体标题文字变成粗斜体。相反如果把\itshape写在第二参数里那编号和文字都会变成斜体。这个细节很容易忽略我曾经在一个模板里看到作者把\itshape放在第二参数结果编号也斜了视觉上编号歪歪扭扭非常难看。同理三级标题如果只想要文字斜体可以写\titleformat{\subsubsection}{\normalsize\bfseries}{\thesubsubsection}{1em}{\itshape}如果你完全不需要titlesec带来的额外间距调整那这条就够了。titlesec还有一个配套命令\titlespacing用来调整标题前后间距比如\titlespacing*{\subsection}{0pt}{*3}{*1}星号表示压缩模式后面三个值分别是左侧缩进、段前间距、段后间距。投稿的时候如果发现标题间距和模板要求不一致多半是模板里用\titlespacing做了控制你可以在导言区覆盖它。5. 反过来操作想让作者名是灰色、标题是斜体该怎么做5.1 用titling宏包控制作者名样式有人可能觉得奇怪谁会把作者名故意改成灰色还真有。比如做一个封面页或者做内部资料封面想让作者信息淡一点、不抢标题的视觉重量就会用灰色。另外做PPT的时候也常把作者放在底部用浅灰字显示。手动修改官方模板的颜色很繁琐标准做法是用titling宏包。它能让你在\maketitle前后插入自定义代码不需要碰.cls文件。\usepackage{titling} \pretitle{\begin{center}\LARGE\color{gray}} \posttitle{\end{center}} \preauthor{\begin{center}\large\color{gray}} \postauthor{\end{center}} \predate{\begin{center}\large} \postdate{\end{center}}注意\color命令来自xcolor宏包要先加载。这样设置之后\maketitle渲染出的标题和作者名都会变成灰色。如果你只想要作者名灰、标题保持黑色那就把\pretitle里的\color{gray}去掉只在\preauthor里保留。titling的优点是不侵入模板底层投稿时想去掉灰色直接删掉这几行就行。不过有个兼容性细节使用hyperref时我一般会把titling放在它前面加载避免某些版本里链接锚点定位出问题。5.2 重定义\maketitle更暴力的定制方式如果titling对你来说包装太多或者模板里的\maketitle结构太复杂可以直接重写整个标题区。下面的代码演示了一个极简但完整的自定义\maketitle\makeatletter \renewcommand{\maketitle}{% \begin{center} {\LARGE\bfseries\color{gray}\title\par} \vspace{1em} {\large\color{gray}\author\par} \vspace{0.5em} {\large\date\par} \end{center} } \makeatother这里用到了\title和\author它们是LaTeX内部保存标题和作者内容的宏命令。\makeatletter和\makeatother的作用是临时把变成普通字符让用户可以在正文中访问内部命令这个套路在改模板时非常常见。这种方式定制能力最强但也很容易把模板原有的精美设计覆盖掉。如果只是为了调颜色我还是建议用titling重定义\maketitle更适合做封面这类完全自定义的场景。5.3 主动给标题设置斜体的正确写法反向设置标题斜体的逻辑和修复是一样的只是把titlesec的\itshape放在想要的位置。\titleformat{\subsection}{\large\itshape}{\thesubsection}{1em}{} \titleformat{\subsubsection}{\normalsize\itshape}{\thesubsubsection}{1em}{}这就是把所有二级、三级标题设置为斜体的标准写法。需要注意如果同时想要粗体就写\bfseries\itshape顺序无所谓因为这两个命令分别是设置“字重”和“字形”互不干扰。对于中文文档我更推荐直接用楷体来代替西文斜体。原因是中文字符本身没有斜体强制\itshape最终要么失效要么变成某种伪斜体在期刊投稿里容易显得不专业。看起来像“中文斜体”的正确做法是\titleformat{\subsection}{\large\bfseries\kaishu}{\thesubsection}{1em}{}楷体在视觉上具有手写倾向能起到和斜体类似的强调作用在中文排版里也比伪斜体自然得多。如果你就是想用真正的“倾斜”效果可以在ctex宏包里开启伪斜体支持但那属于进阶玩法不建议在正式论文里用。6. 改完样式之后这些连带坑一个都别踩6.1 hyperref的加载位置和hidelinks的生效时机hyperref应该放在导言区比较靠后的位置因为它会重新定义大量内部命令如果你在它之前加载了其他宏包又恰好重置了相关命令链接就可能会失效。但还要注意一点\hypersetup可以放在\usepackage{hyperref}之后也可以放在文档正文里甚至可以用\AtBeginDocument包起来不过后者一定要确保在超链接生成前执行。我在实际工程里看到过一个诡异现象作者在导言区写了两次\hypersetup第一次设置hidelinks第二次设置colorlinkstrue结果作者名还是带颜色。原因很简单第二次设置把第一次的选项覆盖了。\hypersetup不是累加而是覆盖同名选项所以在同一个文档里检查一下自己有没有重复设置。6.2 颜色设置与xcolor的顺序问题如果你想在标题里用\color{gray}或者\textcolor{gray}记得提前加载xcolor。LaTeX内核本身只支持非常有限的颜色灰色这种常见颜色也需要颜色宏包支持。很多模板已经内置了xcolor但如果你自定义一个独立的小文档漏掉这步就会直接报错Undefined color gray。另外gray在xcolor里是一个预定义颜色想用更细的灰度可以直接写black!30表示30%的黑色也就是浅灰色。在作者栏里gray可能显得太深black!50又太浅具体用哪个要多看几眼对比图。我这里给个参考封面上的作者名一般用black!60到black!80之间比较合适太浅了打印出来基本看不清。6.3 模板自带的标题间距会被titlesec重置用titlesec改标题样式时有个副作用它会改变标题前后间距的默认行为。如果你只写了\titleformat而没有设置\titlespacing标题的间距可能和模板原来的设计不一致看起来行距怪怪的。遇到过几次这种情况模板里本来通过\startsection规定了\subsection的前后间距一加载titlesec并覆盖\titleformat之后间距全部恢复成默认状态导致章节标题紧挨着正文观感非常差。解决方式是在v\titleformat旁边补一个\titlespacing把模板里的间距数值也抄过来。不知道数值的情况下先用默认值编译一次和原范文对比一下再微调before-sep和after-sep。6.4 投稿前一定要做的一步对比原版范文最后说一个大多数教程不会提的习惯在改样式之前先保留一份模板原封不动的编译结果用PDF对比文件。调完作者颜色和标题斜体之后把两份放在一起逐页对比重点看标题层次是否依然分明、作者栏是否和模板整体风格协调。我帮人查这种样式问题最怕的不是改不了而是改完之后这里那里又冒出新问题。最小示例、二分注释、对比PDF这三板斧下来任凭什么奇怪的模板设置都能很快找到来源。至于标题斜体这个问题反正我后来一看到“标题歪了”的第一反应不是去正文里找\textit而是先去.cls和titlesec里翻模板的家底。