\sffamily
我的第一个问题是,LaTeX 究竟何时会触发字体警告?我怀疑是在我通过或请求字体时\selectfont
,对吗?
这就是为什么
\documentclass{article}
\begin{document}
\fontseries{book}\selectfont \fontseries{m}\selectfont Test
\end{document}
结果是
LaTeX Font Warning: Font shape `OT1/cmr/book/n' undefined
(Font) using `OT1/cmr/m/n' instead on input line 4.
即使我不需要book
我所请求的系列中的单个字形。
因此,根据这些知识,我的问题是,在我的文档中,我收到了来自 的虚假字体警告\tableofcontents
,因为bx
系列在我加载的字体中不可用\sfdefault
,而是被替换为m
。但是没有文本元素以该字体排版,这就是为什么我不知道从哪里开始寻找它,但我怀疑我甚至没有使用的定义试图选择bx
。
您能建议我采用什么方法来追踪bx
请求后未使用的位置?因此,这不仅仅是关于这个问题,而更多的是关于调试技术的问题。例如,是否可以挂接\selectfont
并让它打印何时调用以及从哪个文件调用它?
感谢您的帮助和提示,如果我需要进一步澄清,请告诉我。
补充澄清
非常感谢您迄今为止的评论。虽然我很感激您想在这里研究我的具体问题,但我真的更渴望学习如何自我调试。因此,这里有一个 MWE,可以更好地说明这个问题:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{mycommand.tex}
\newcommand{\MyCommand}[1]{{\fontseries{seriesthatdoesnotexist}\selectfont \fontseries{m}\selectfont #1}}
\end{filecontents}
\input{mycommand.tex}
\begin{document}
\MyCommand{Test}
\end{document}
想象一下mycommand.tex
,它不是很明显地加载了,而是在 documentclass、包或任何地方。但是当您在日志中看到字体警告时,它显示:
LaTeX Font Warning: Font shape `OT1/cmr/seriesthatdoesnotexist/n' undefined
(Font) using `OT1/cmr/m/n' instead on input line 11.
从其他编程或脚本语言中,我习惯使用可以逐步执行我的代码或设置断点的调试器,以及查看之前进行的所有调用的跟踪的可能性。
在这种情况下,LaTeX 在第 11 行给我留下了一个问题,如果我不知道在哪里以及如何\MyCommand
定义,我就无法理解。
是否真的可以追踪到导致问题的命令位置或定义命令的位置?那么在这种情况下,有没有办法引导我找到mycommand.tex
?
我希望这个补充能够澄清我所寻找的内容,这是一种调试技术,而不是字体替换问题的解决方案。
说明现实世界中问题的 MWE:
\documentclass[]{scrbook}
\usepackage[scaled]{uarial}
%%%%\setkomafont{disposition}{\normalfont} %solves the issue
\setkomafont{chapter}{\normalfont\Large\selectfont}
\begin{document}
\tableofcontents
\end{document}
我又花了些时间,但这是现实世界中的 MWE。字体chapter
通常为\sffamily\bfseries
,但即使您覆盖它,它仍被选中,因为disposition
之前使用了 komafont。现在该行\setkomafont{disposition}{\normalfont}
修复了该问题,但如果没有这些知识,如何跟踪和调试它?