我想使用包在我的调查中编写伪代码program
。由于我使用的是英语以外的其他语言,因此我必须更改这些环境的名称,例如theorem
和proof
等(这些环境都来自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
program
重新定义\proof
而不考虑其先前的定义。因此,你最好存储其原始定义(由amsthm
),然后加载program
并恢复 的原始定义\proof
。\usepackage{amsthm,letltxmacro} \LetLtxMacro\oldproof\proof% Store \proof \usepackage{program} \LetLtxMacro\proof\oldproof% Restore \proof
注意使用
letltxmacro
自从\proof
实际上接受一个可选参数。参见何时使用\LetLtxMacro
?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}