我为我的文档创建了一个自定义语言切换宏。在某些情况下,它似乎工作正常,但在其他情况下则不然。如何让它在任何情况下都工作,例如,根据我的 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}