那么,你到底想要什么?

 那么,你到底想要什么?

我有一个在文本中出现非常频繁的宏。有一次,它出现在标题内,这导致了一些问题:

\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}

输出以下内容:

具有不同标题字体样式的 Latex 输出

第 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 中没有无衬线粗体斜体(甚至可能没有斜体非粗体字体)。

您说使用articleclass 后问题就消失了,“警告消失了,标题 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,以便让它自动运行。

相关内容