我有一个在文本中出现非常频繁的宏。有一次,它出现在标题内,这导致了一些问题:
\documentclass{scrartcl}
\newcommand\FrequentlyUsedMacro{\emph{\textbf{Macro}}}
\begin{document}
\section{Random section}
This section has the preferred font in its title.\\
Also, very many \FrequentlyUsedMacro{}s.
\section{\FrequentlyUsedMacro{}}
This section also has the right font, but causes warnings.
\section{\textrm{\FrequentlyUsedMacro{}}}
This removes the warnings, but the font is now wrong.
\end{document}
输出以下内容:
第 2 部分给出以下警告:
LaTeX Font Warning: Font shape `OT1/cmss/bx/it' undefined
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
为什么在第 3 部分中明显可以出现警告?或者它只是没有斜体无衬线字体?
附加信息:如果{article}
使用 而不是{scrartcl}
,警告将消失,标题 2 和 3 都变为斜体。此外,如果\textbf{}
从宏中删除 ,问题仍然保持不变。
这是较大文档的一部分,所以我想去掉警告。有没有办法让标题既不带样式又不带警告?我确信有,但我无法通过搜索功能找到它。
任何帮助都非常感谢!
答案1
我认为这个问题不够清楚。你遇到了一个你不完全理解的问题,你要求的解决方案可能不是你想要的。真的想要。所以这里有几张照片,希望其中一张正是你想要的。
问题是默认情况下的特定字体 Computer Modern Sans Serif 中没有无衬线粗体斜体(甚至可能没有斜体非粗体字体)。
您说使用article
class 后问题就消失了,“警告消失了,标题 2 和 3 都变成了斜体”。如果这意味着您并不真正关心标题是否为无衬线字体(这是 中的默认设置scrartcl
),那么
\addtokomafont{disposition}{\rmfamily}
应该可以解决你的问题。
如果你做想要标题中的粗体无衬线字体,那么我引用的那句话是错误的,它不能解决你的问题article
。在这种情况下,你想让输出\verycommonmacro
为罗马粗体斜体还是无衬线粗体斜体。在第一种情况下,你可以重新定义宏
\newcommand*\verycommonmacro{\textrm{\emph{\textbf{Macro}}}}
或者,如果您希望它输出无衬线粗体斜体,则需要具有该特定形状的字体。正如 Christian 所建议的那样,它lmodern
提供了这一点。
\usepackage{lmodern}
(但是您说您得到的都是斜体字?那么我不知道您的问题是什么。)
最后一个选项就是您要求的,即从该宏中删除任何格式。(我忘记了这个代码。)在这种情况下,您可以在标题内设置一个标志,然后让宏检查该标志,如果它处于 ON 状态,则执行某些操作,如果它未处于 ON 状态,则执行其他操作。在这种情况下,借助etoolbox
,如果它在标题中,则插入\relax
,如果不是,则使用\emph
。
\usepackage{etoolbox}
\newtoggle{insection}
\addtokomafont{disposition}{\toggletrue{insection}}
\newcommand*\verycommonmacro
{\iftoggle{insection}{Macro}{\emph{\bfseries Macro}}}
那么,你到底想要什么?
答案2
这是另一个建议,用于\newkomafont
为该元素定义字体样式。如果有目录,这也有效。
\documentclass{scrartcl}
\newkomafont{frequentlyusedmacro}{\bfseries\itshape}
\newcommand*\FrequentlyUsedMacro{{\protect\usekomafont{frequentlyusedmacro}Macro}}
\addtokomafont{disposition}{\setkomafont{frequentlyusedmacro}{}}
\BeforeStartingTOC{\setkomafont{frequentlyusedmacro}{}}
\begin{document}
\tableofcontents
\section{Random section}
This section has the preferred font in its title.\\
Also, very many \FrequentlyUsedMacro{}s.
\section{\FrequentlyUsedMacro{}}
This section also has the right font, but causes warnings.
\section{\FrequentlyUsedMacro}
\subsection{\FrequentlyUsedMacro}
This removes the warnings, but the font is now wrong.
\end{document}
答案3
我找到了一些解决方案不是我觉得很干净。但是,它们可能适合您的需求:
\documentclass{scrartcl}
\newcommand\FrequentlyUsedMacro{\emph{\textbf{Macro}}}
\newcommand{\startnoemph}{\let\emph\relax}
\begin{document}
\section{\startnoemph \FrequentlyUsedMacro{}}
This works with \FrequentlyUsedMacro{}.
\end{document}
或者:
\documentclass{scrartcl}
\newcommand\FrequentlyUsedMacro{\emph{\textbf{Macro}}}
\newcommand{\noemph}[1]{\begingroup\let\emph\relax#1\endgroup}
\begin{document}
\section{\noemph{\FrequentlyUsedMacro{}}}
This works with \FrequentlyUsedMacro{}.
\end{document}
我确信可以使用该包etoolbox
进行修补\section
,以便让它自动运行。