如何检测PDF打印模式?

如何检测PDF打印模式?

这是代码(这只是一个例子,我的真实情况更大,我有两个命令\foo\print我需要前者用一个可选参数调用后者):

\documentclass{article}
\usepackage{hyperref}
\newcommand\print[2][bar]{#2}
\newcommand\foo{\print{world}}
\begin{document}
\section{Hello \foo!}
\end{document}

它给了我以下警告:

Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref)                removing `\print' on input line 6.

哪里出了问题?我该如何修复?在我的实际情况下,打印内容的决定是由 做出的\print,因此我无法\texorpdfstring在 内部使用\foo

这是我的真实情况。首先,有\anon命令里面acmart.cls

\newcommand{\anon}[2][ANONYMIZED]{%
  \if@ACM@anonymous%
    {\color{ACMOrange}#1}%
  \else%
    #2%
  \fi}

然后我有自己的\eolang命令里面eolang.sty

\newcommand\eolang{%
  \ifdefined\anon%
    \anon[XYZ]{{\sffamily EO}}%
  \else%
    {\sffamily EO}%
  \fi%
}

最后,我这样做:

\documentclass[anonymous]{acmart}
\usepackage{eolang}
\begin{document}
\section{Hello \eolang!}
\end{document}

我收到了警告。

答案1

\anon修复(以完全兼容的方式)的定义。

\documentclass[anonymous]{acmart}

%\usepackage{eolang}
% just the relevant macro from eolang.sty
\makeatletter
\newcommand\eolang{%
  \ifdefined\anon
    \anon[XYZ]{\textsf{EO}}%
  \else
    \textsf{EO}%
  \fi
}
\makeatother
% end of excerpt from eolang.sty

% Fix \anon to be expandable
\makeatletter
\NewDocumentCommand{\ACM@orange}{m}{\textcolor{ACMOrange}{#1}}
\pdfstringdefDisableCommands{\let\ACM@orange\@firstofone}
\RenewExpandableDocumentCommand{\anon}{O{ANONYMIZED}m}{%
  \if@ACM@anonymous
    \ACM@orange{#1}%
  \else
    #2%
  \fi
}
\makeatother

\begin{document}

\section{Hello \eolang!}

\end{document}

在此处输入图片描述

删除该anonymous选项将

在此处输入图片描述

相关内容