如何正确缩短 if 条件?

如何正确缩短 if 条件?
\documentclass{article}
\title{}
\author{}
\date{}
\begin{document}

\newcommand{\mybold}[2]{\ifnum #1=1 \textbf{#2} \else{#2} \fi}
\mybold{1}{This should be bold}

\mybold{0}{This should NOT be bold}
\end{document}

在此代码中,命令mybold接受数字和文本。如果数字是,则1文本被强调,如果不是,则不强调。它按预期工作。

\documentclass{article}
\title{}
\author{}
\date{}
\begin{document}

\newcommand{\mybold}[2]{\ifnum #1=1 \textbf\fi{#2}}
\mybold{1}{This should be bold}

\mybold{0}{This should NOT be bold}
\end{document}

#2我尝试通过在if 条件后面添加代码来缩短第一个代码。但是,我得到了too many }'s错误。如何让第二个代码起作用?

答案1

做这个。

\documentclass{article}
\title{}
\author{}
\date{}
\begin{document}

\newcommand{\mybold}[2]{\ifnum #1=1 \expandafter\textbf\fi{#2}}
\mybold{1}{This should be bold}

\mybold{0}{This should NOT be bold}
\end{document}

解释:TeX\if...命令的工作方式有点不直观,因此将\textbf“看到” \fi。请参阅\@firstoftwo 和 \@secondoftwo 起什么作用?

如果你想了解 TeX 宏编程的细节,可以参考以下资源我应该从哪里开始 LaTeX 编程?。但通常编写“更简单”的代码更好。

答案2

虽然user202729 的回答更切合编程问题,为了解决印刷问题,您可能只想使用字体开关而不是命令\textbf

\documentclass{article}
\title{}
\author{}
\date{}
\begin{document}

\newcommand{\mybold}[2]{{\ifnum #1=1 \bfseries\fi #2}}% NOTICE the difference in grouping!
\mybold{1}{This should be bold}

\mybold{0}{This should NOT be bold}
\end{document}

但请注意,这两种方法并不完全相同;可能存在如果需要斜体校正则有差异在开关上。

相关内容