扩展序言中的宏命令时出错

扩展序言中的宏命令时出错

我尝试创建一个 if...else 命令,当我在正文中展开它时,它似乎是正确的,但在序言中却不正确。软件包答案似乎不包括在内,因为 \Newassociation 命令未知。我尝试直接使用 \ifodd,它有效,但我会理解我的错误(引用、转义……?)。

pdflatex 的日志

! Missing number, treated as zero.
<to be read again> 
               {
l.14 ...tionfiles]{answers}}{\usepackage{answers}}

(/usr/local/texlive/2017/texmf-dist/tex/latex/answers/answers.sty
(/usr/local/texlive/2017/texmf-dist/tex/latex/tools/verbatim.sty))

! Undefined control sequence.
l.29 \Newassociation
                {SOL}{Solution}{tempo}

LaTeX 代码

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}

\newlength{\personnelmm}
\setlength{\personnelmm}{1pt}

\newcommand{\ifpersonnel}[2]
{\ifodd\personnelmm{#1}\else{#2}\fi}

\ifpersonnel{\usepackage[nosolutionfiles]{answers}}{\usepackage{answers}}

% \ifodd\personnelmm
% \usepackage[nosolutionfiles]{answers}
% \typeout{THEN}
% \else
% \typeout{ELSE}
% \usepackage{answers}
% \fi

\Newassociation{SOL}{Solution}{tempo}
\renewcommand{\Solutionlabel}[1]{\textbf{Solution #1}}

\begin{document}
...

答案1

\newlength{\personnelmm}
\setlength{\personnelmm}{1pt}

则将\personnelmm是 65536sp,因此在数字环境中充当 65536(偶数)。

但是你根本不需要这里的长度,只需使用

\newif\ifpersonnelmm
\personnelmmtrue % or false

那么您的定义无论如何都会执行{#1}{#2}包将被加载到本地组内,因此所有定义都会被丢弃。

预期的定义是

\newcommand{\ifpersonnel}[2]
{\ifpersonnelmm #1\else #2\fi}

但是,最好不要将其命名为starting \if...,而将这样的名称保留给通过定义的命令,\newif 否则很难用\if...\else...\fi眼睛检查嵌套。(也就是说,它会使人感到困惑,但不会使系统感到困惑)。

答案2

感谢您的帮助,新版本已跟进并正常运行!

\newif\ifpersonnel
\personneltrue % or \personnelfalse
\newcommand{\sipersonnel}[2]
{\ifpersonnel #1\else #2\fi}

\sipersonnel{\usepackage[nosolutionfiles]{answers}}{\usepackage{answers}}

相关内容