我正在加载stringstrings
包中的双竖线\|
(在数学模式下)打印为 |0(单竖线后跟零)。我检查了文件stringstrings.sty
,确实注意到以下几行
\def\PipeCode{0}
\def\EncodedPipe{\EscapeChar\PipeCode}
\def\Pipe{|}
\let\|\EncodedPipe
下面是两个展示该问题的最小工作示例。
\documentclass{article}
\begin{document}
Without {\tt stringstrings}: $\|$ \(\|\)
\end{document}
\documentclass{article}
\usepackage{stringstrings}
\begin{document}
With {\tt stringstrings}: $\|$ \(\|\)
\end{document}
我猜想stringstrings
这是由于一些字符串操作问题造成的,但是有没有办法恢复原始符号,与包的用途兼容?此外,还有其他我应该注意的重新定义吗?
编辑:\|
我通过在序言中自己重新定义命令来解决这个问题:
\let\doublebar\|
\usepackage{stringstrings}
\def\|\doublebar
但我担心它可能与包装发生冲突。此外,手册第 16 页列出了(一些?)重新定义,但我不明白应该如何解决这个问题。
答案1
\|
您可以在加载包之前“保存” 的定义stringstrings
,例如,\let\pipe\|
。加载后,stringstrings
您现在可以使用\pipe
而不是\|
。
以下是完整的 MWE:
\documentclass{article}
\let\pipe\|
\usepackage{stringstrings}
\begin{document}
With {\tt stringstrings}: $\|$ \(\|\) $\pipe$
\end{document}
生成结果:
加载后,stringstrings
您可以输入\let\|\pipe
,但这可能会破坏由 定义的某些内容,stringstrings
因此我建议改用\pipe
。当然\pipe
,您可以随意调用它 - 尽管我建议避免使用现有的 LaTeX 命令名称。例如,\let\cow\|
同样有效。