当我们\usepackage{breqn}
包括
\XMLelement{TEI.2}{}
{ \documentclass{article}
\usepackage{ifthen,url}
\usepackage{breqn}
\begin{document} }
{\end{document}}
我们收到以下错误:
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 啊,内部 LaTeX3 错误!
模块内核,消息名称“command-already-defined”:参数'
请指教如何修改下面的宏以"xmltex.tex"
避免上述错误:
% set up 7bit range
\count@0
\catcode0=13
\gdef\XML@tempa{
\begingroup
\uccode0\count@
\uppercase{\endgroup
\edef^^@{
\ifnum\catcode\count@=11 %
\noexpand\utfeightay\else\noexpand\utfeightax\fi
\noexpand^^@}
\expandafter\edef\csname 8:\string^^@\endcsname{\string^^@}}
\ifnum\count@<127\advance\count@1 \expandafter\XML@tempa\fi}
\XML@tempa
\catcode0=9
答案1
真的,这些天我不会推荐它xmltex
,我写了它,但我想这可能是我十年左右第一次运行它......
加载breqn
等expl3
之后xmltex
改变了一些事情大概可以工作但实际上我不会尝试(或者至少我刚才尝试过而且工作量比合理的要大)
您可以在开始breqn
之前xmltex
通过编辑提前加载manual.tex
(例如,看起来像
\def\xmlfile{manual.xml}
\RequirePackage{breqn}
\input xmltex
然后使用pdflatex
而不是pdfxmltex
那样加载所有包而不会出现错误,但随后文档进入无限循环处理 URL
! Interruption.
\Url@String ->h
ttp://www.latex-project.org/lppl.txt
l.68 </front>
?
! Interruption.
\Url@String ->h
ttp://www.latex-project.org/lppl.txt
l.68 </front>
总的来说,我认为不要使用breqn
with xmltex
。如果您想使用breqn
(或者即使您不想使用),现在使用 XSLT 或其他 XML 感知处理语言将您的 XML 写成普通的 tex 语法要容易得多,然后您可以使用所需的任何 latex 构造。
答案2
expl3
可以通过改变(ASCII null)的性质来解决加载问题^^@
,例如
\begingroup
\catcode`\^^@=\active
\gdef\savenull{%
\let\savednull^^@\let^^@\undefined
}%
\gdef\restorenull{\let^^@\savednull}
\endgroup
\XMLelement{TEI.2}{}
{ \documentclass{article}
\usepackage{ifthen,url}
\savenull
\usepackage{expl3}
\restorenull
\begin{document} }
{\end{document}}
可能这可以/应该自行排序expl3
(我们需要在应用我们自己的定义之前注意活动空值)。
我可以去breqn
_loadby then dealing with the nature of
吗?`
\XMLelement{TEI.2}{}
{ \documentclass{article}
\usepackage{ifthen,url}
\setupnull
\catcode`\?=12 %
\usepackage{breqn}
\restorenull
\catcode`\?=\active
\begin{document} }
{\end{document}}
(?
出现在一个控制序列名称里面breqn
。)
然而,这在实际文档中不起作用。原因是它breqn
通过为一系列数学模式符号提供“活动”定义来工作。你能例如,通过保存/恢复来强制过去
\begingroup
\catcode`\^^@=\active
\gdef\setupnull{%
\let\savednull^^@\let^^@\undefined
}%
\gdef\restorenull{\let^^@\savednull}
\endgroup
\gdef\looper#1{\ifx\relax#1\relax\else\foo#1\expandafter\looper\fi}
\gdef\fooa#1{%
\lccode`\~=`#1 %
\lowercase{\expandafter\let\csname saved\string#1\endcsname~}%
}
\gdef\foob#1{%
\lccode`\~=`#1 %
\lowercase{\expandafter\let\expandafter~\csname saved\string#1\endcsname}%
}
\gdef\chars{r<>:-!/=?}
\XMLelement{TEI.2}{}
{ \documentclass{article}
\usepackage{ifthen,url}
\setupnull
\let\foo\fooa
\expandafter\looper\chars\relax
\catcode`\?=12 %
\usepackage{breqn}
\restorenull
\let\foo\foob
\expandafter\looper\chars\relax
\catcode`\?=\active
\begin{document} }
{\end{document}}
但是,这或多或少会禁用所有breqn
工作方式。我会选择大卫的结论:最好使用替代方法从 XML 生成 LaTeX,然后自由选择包。