条件输出到部分有效,但不能到章节

条件输出到部分有效,但不能到章节

我为我的文档创建了一个自定义语言切换宏。在某些情况下,它似乎工作正常,但在其他情况下则不然。如何让它在任何情况下都工作,例如,根据我的 LANGUAGE 标志仅输出第一个或第二个括号的内容?

以下是最小的工作示例:

\documentclass[11pt,a4paper]{article}
\usepackage{xifthen}

\newcommand{\LANGUAGE}{DE}              % or EN

% language selector, the command \LANGUAGE needs to be set before
\newcommand{\deen}[2]{\ifthenelse{\equal{\LANGUAGE}{DE}}{#1}{\ifthenelse{\equal{\LANGUAGE}{EN}}{#2}{NO LANGUAGE}}}

% content
\begin{document}
\section{Some title}
\deen{first entry}{second entry}                        % this one works
\section{Another title}
%\subsection{\deen{First language}{Second language}}    % this one fails
\end{document}

在当前设置(LANGUAGE=DE)下,文档如下所示:

1 某个标题的第一个条目 2 另一个标题

在第一种情况下,将标志更改为 LANGUAGE=EN 可以解决问题(“第一个条目”行将更改为“第二个条目”),但是当将其包含在例如 \subsection{} 中时,它会失败并出现以下错误:

! Undefined control sequence.
<argument> \equal
{\LANGUAGE }{DE}
l.14 ...on{\deen{First language}{Second language}}

任何帮助都将不胜感激!

答案1

根据定义,它是脆弱的,因此它必须在移动参数(例如章节标题)中\deen以 为前缀,或者用 来定义。\protect\DeclareRobustCommand

\documentclass[11pt,a4paper]{article}
\usepackage{xifthen}

\newcommand{\LANGUAGE}{DE}              % or EN

% language selector, the command \LANGUAGE needs to be set before
\DeclareRobustCommand{\deen}[2]{%
  \ifthenelse{\equal{\LANGUAGE}{DE}}{#1}{%
    \ifthenelse{\equal{\LANGUAGE}{EN}}{#2}{NO LANGUAGE}}}

% content
\begin{document}
\section{Some title}
\deen{first entry}{second entry}                        % this one works
\section{Another title}
\subsection{\deen{First language}{Second language}}    % this one fails
\end{document}

在此处输入图片描述

答案2

我不确定为什么你的代码不起作用,但也许你应该采取一种更简单的方法,只需定义一个新的布尔值即可

\newif\ifGerman% false by default

您可以使用类似的代码\ifGermam <true code>\else<false code>\fi,并且可以使用 \deen` 更改切换的值\Germantrue\Germanfalse. So, with this in place you can define如下所示:

\newcommand{\deen}[2]{\ifGerman #1\else#2\fi}

将其插入问题中 MWE 的扩展版本可得到输出:

在此处输入图片描述

完整代码如下:

\documentclass[11pt,a4paper]{article}
\newif\ifGerman% false by default

% language selector, the command \LANGUAGE needs to be set before
\newcommand{\deen}[2]{\ifGerman #1\else#2\fi}

% content
\begin{document}

  First with \verb+\Germanfalse+
  \section{Some title}
  \deen{first entry}{second entry}                        % this one works
  \section{Another title}
  \subsection{\deen{First language}{Second language}}    % this one also works

  Now with \verb+\Germantrue+

  \Germantrue
  \section{Some title}
  \deen{first entry}{second entry}                        % this one works
  \section{Another title}
  \subsection{\deen{First language}{Second language}}    % this one works too!

\end{document}

相关内容