![Два \IfEq в \newkeycommand приводят к ошибке](https://rvso.com/image/348643/%D0%94%D0%B2%D0%B0%20%5CIfEq%20%D0%B2%20%5Cnewkeycommand%20%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D1%8F%D1%82%20%D0%BA%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B5.png)
Рассмотрим этот файл .tex
\documentclass[10pt]{article}
\usepackage{MWE}
\MWESettings[X=8]{article}
\begin{document}
The answer is \name
\end{document}
Где находится MWE.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{MWE}
\RequirePackage{xstring}
\RequirePackage{keycommand}
\newkeycommand{\MWESettings}[X=1][1]
{
\IfEq{#1}{article} { \newcommand{\name}{article \commandkey{X}} } <-- Line A
\IfEq{#1}{news} { \newcommand{\name}{news \commandKey{X}} } <-- Line B
}
Если я pdflatex-файл .tex, я получаю эту ошибку:
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.4 \begin{d
ocument}
Что я делаю не так?
решение1
Насколько я понимаю ваш код, вам бы это понравилось
\MWESettings[X=8]{article}
делает
\newcommand{\name}{article 8}
пока
\MWESettings[X=5]{news}
делает
\newcommand{\name}{news 5}
Вы забываете о «ложной ветке»: она должна быть
\IfEq{<string-a>}{<string-b>}{<true>}{<false>}
Так что это работает.
\documentclass[10pt]{article}
\usepackage{xstring}
\usepackage{keycommand}
\newkeycommand{\MWESettings}[X=1][1]
{%
\IfEq{#1}{article}{\newcommand{\name}{article \commandkey{X}}}{}% <-- Line A
\IfEq{#1}{news} {\newcommand{\name}{news \commandkey{X}}}{}% <-- Line B
}
\MWESettings[X=8]{article}
\begin{document}
The answer is \name
\end{document}
Обратите внимание, что вы добавляете в свой код много нежелательных пробелов.
Непонятно, почему бы не использовать его напрямую #1
вместо \IfEq
текста, но, полагаю, это упрощенный пример.
Не то, чтобы я рекомендовал keycommand
. Другая реализация с xparse
:
\documentclass[10pt]{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\MWESettings}{O{X=1}m}
{
\keys_set:nn { kreher/mwe } { #1 }
\cs_new:Npx \name
{
\str_case:nn { #2 }
{
{article}{article}
{news}{news}
}~\l_kreher_mwe_x_tl
}
}
\keys_define:nn { kreher/mwe }
{
X .tl_set:N = \l_kreher_mwe_x_tl,
}
\ExplSyntaxOff
\MWESettings[X=8]{article}
\begin{document}
The answer is \name
\end{document}