我如何测试当前的字体?

我如何测试当前的字体?

情况如下,我有一个字体A使用一个功能和另一种字体b另一个功能,我正在写一个命令,如果当前字体需要切换到字体b但如果字体是C不需要做任何事情。基本上:

if currentfont is a set font b

如何实现这一点?


编辑: 好吧,我承认我问这个问题是因为我正在研究一个解决方案这个问题我以为这个 if else 问题是一个单独的问题(我错了吗?)但现在我真的陷入困境了……我花了一些时间尝试遵循这里答案中的建议,但我一直失败。这个例子:

\documentclass[oneside]{memoir}
    \usepackage[osf]{mathpazo}
    \usepackage{helvet}
    \usepackage{ifthen}

    \makeatletter
    \renewcommand*{\thechapter}{%
        \ifthenelse{%
            \equal{\f@family}{pplj}%
    }%    
    {%
        {\fontfamily{ppl}\selectfont%
        \textsc{\roman{chapter}}}%
    }%
    {%
        \textsc{\roman{chapter}}%
    }%
}%
\makeatother
\renewcommand{\cftchapterpagefont}{\fontfamily{pplj}\selectfont\bfseries}
\renewcommand{\cftsectionpagefont}{\fontfamily{pplj}\selectfont}
\captionnamefont{\sffamily\scshape\small}
\captiontitlefont{\sffamily\small}

\begin{document}

\tableofcontents

\chapter{The number 4 is more than 2}

\section{The number 4 is}
    If I write chapter \ref{anotherChapter} like this is
    looks oki.
    But the number in the header is a small i not a \textsc{i} and same
    thing in the table of content and the chapter header\dots
\begin{figure}
    \caption{Lorem ipsum}
    \center \LARGE LOREM IPSUM
\end{figure}
\section{More than 4}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur
tempus facilisis nunc, sit amet suscipit ligula fermentum ac. Ut
fringilla, elit eget facilisis venenatis, risus massa viverra sem, a
placerat massa odio a mauris
\chapter{Another chapter}
\label{anotherChapter}
\end{document}

出现此错误(已编辑):

! Undefined control sequence.
<argument> \equal 
                  {\f@family }{pplj}
l.29 \chapter{The number 4 is more than 2}

?

看来我在使用这些旧式数字时遇到了很多麻烦...我做错了什么?

答案1

您可以使用命令访问当前字体\font,即使用\the\font哪个扩展为例如\OT1/cmr/m/n/10正常电脑现代字体。您可以保存字体的扩展文本A并将其与的结果进行比较\the\font

使用 TeX if-switches:

% switch to font 'a'
% Save expansion text:
\edef\fonta{\the\font}
%
\makeatletter
\newcommand*{\iffonta}{%
   \begingroup
   \edef\currentfont{\the\font}%
   \ifx\currentfont\fonta
      \endgroup
      \expandafter\@firstoftwo
   \else
      \endgroup
      \expandafter\@secondoftwo
   \fi
}
\makeatother

然后你就可以使用了\iffonta{<yes>}{<no>}。或者,只需直接在宏中添加所需的代码,而不要使用\expandafter\@firstoftwo/\expandafter\@secondoftwo部分:

\newcommand*{\changetofontaiffontb}{%
   \begingroup
   \edef\currentfont{\the\font}%
   \ifx\currentfont\fonta
      \endgroup
      % change to font b
   \else
      \endgroup
   \fi
}

答案2

与 Martin 的例子类似,根据你想要测试的具体内容,你可以执行以下操作

\documentclass{article}
\usepackage{ifthen}
\usepackage{helvet}
\makeatletter
\newcommand{\showfont}{encoding: \f@encoding{},
  family: \f@family{},
  series: \f@series{},
  shape: \f@shape{},
  size: \f@size{}
}
\newcommand{\iffont}[3]{\ifthenelse{\equal{\f@family}{#1}}{#2}{#3}}
\makeatother
\begin{document}
\showfont

\iffont{cmr}{
  Font was cmr, switching to Helvetica.
  \renewcommand{\familydefault}{\sfdefault} \normalfont
}{
}

Here's another line of text.
\end{document}

要得到

在此处输入图片描述

\f@family如果需要,可将命令中的更改\iffont为您想要检查的任何其他字体属性。参考:LaTeX2e 字体选择

相关内容