我尝试创建一个 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}}