程序包冲突

程序包冲突

我想使用包在我的调查中编写伪代码program。由于我使用的是英语以外的其他语言,因此我必须更改这些环境的名称,例如theoremproof等(这些环境都来自amsthm)。我使用命令

\renewcommand{\proofname}{XXX}

以改变证明名称,但在加载program包后,名称又变回为证明用粗体字表示,而不是XXX我想要的。

另一个冲突发生在竖线的使用上。该program|variable_name|在普通文本和数学表达式中都使用,因此当我写下以下等式时:

\[f|_{\mathsf{ker} A}=g|_{\mathsf{Ker} A}\]

其中竖线表示功能限制,它被解释为变量,并且编译器声称错误:

! LaTeX Error: \mathsf allowed only in math mode.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.208     \[f|_{\mathsf
                       {ker} A}=g|_{\mathsf{Ker} A}\]

我该如何解决这些问题?我知道algorithmicx一些类似的软件包也可以完成伪代码工作,但我真的不喜欢它们的严格结尾或者万一时尚。

提前致谢。

答案1

  1. program重新定义\proof而不考虑其先前的定义。因此,你最好存储其原始定义(由amsthm),然后加载program并恢复 的原始定义\proof

    \usepackage{amsthm,letltxmacro}
    \LetLtxMacro\oldproof\proof% Store \proof
    \usepackage{program}
    \LetLtxMacro\proof\oldproof% Restore \proof
    

    注意使用letltxmacro自从\proof实际上接受一个可选参数。参见何时使用\LetLtxMacro

  2. program提供\normalbaroutside恢复原始\catcode的 ,|而不是让它“以不同的方式”处于活动状态。或者,使用\vert

下面是一个完整的最小示例,展示了上述讨论:

在此处输入图片描述

\documentclass{article}
\usepackage{amsthm,letltxmacro}
\LetLtxMacro\oldproof\proof% Store \proof
\usepackage{program}
\LetLtxMacro\proof\oldproof% Restore \proof
\begin{document}
|variable_name|

\[f\vert_{\mathsf{ker} A} = g\vert_{\mathsf{Ker} A}\]

\[\normalbaroutside
f|_{\mathsf{ker} A} = g|_{\mathsf{Ker} A}\]
\end{document}

相关内容