\smalltriangleright 在 algpseudocodex 中不起作用

\smalltriangleright 在 algpseudocodex 中不起作用

我正在使用algpseudocodex包以在 LuaLaTeX 中显示伪代码。我想将注释开头的符号更改\smalltriangleright为:

\usepackage[beginComment=$\smalltriangleright$~]{algpseudocodex}

不幸的是,我收到以下错误:

! Undefined control sequence.
\reserved@b ...{beginComment=$\smalltriangleright 
                                                  $~}][{}]\noexpand \@pkgext...
l.9

它与默认的 配合得很好\triangleright。此外,在文档中, 也\smalltriangleright按预期工作。

以下是 MWE:

\documentclass{article}

\usepackage{unicode-math}
\setmainfont{XITS}
\setmathfont{XITS Math}

\usepackage[beginComment=$\smalltriangleright$~]{algpseudocodex} % doesn't work
%\usepackage[beginComment=$\triangleright$~]{algpseudocodex} % works

\begin{document}
$\smalltriangleright$ % works
\end{document}

(在 Overleaf、TeX Live 2021 上测试)

关于我如何来\smalltriangleright这里工作,您有什么想法吗?

答案1

为了使其工作,您需要重新设置开始短注释、开始长注释和结束长注释的默认符号。

A

\documentclass{article}

\usepackage{unicode-math}
\setmainfont{XITS}
\setmathfont{XITS Math} 

\usepackage{algpseudocodex} 

%****************************************** added <<<<<<<<<<<<<<    
\setkeys{algpx}{beginComment=$\smalltriangleright$~}
\setkeys{algpx}{beginLComment=$\smalltriangleright$~}
\setkeys{algpx}{endLComment=~$\smalltriangleleft$}  
%******************************************

\begin{document}
    
    \begin{algorithmic}[1]
    \State $x \gets y^2$
    \LComment{The next two lines increment
         both $x$ and $y$.}
    \State $x \gets x + 1$
    \Comment{Increment $x$.}
    \State $y \gets y + 1$
    \Comment{Increment $y$.}
\end{algorithmic}
\bigskip

\begin{algorithmic}% keep the changes local <<<<<
    \setkeys{algpx}{beginComment=//~}
    \setkeys{algpx}{beginLComment=/*~}
    \setkeys{algpx}{endLComment=~*/}        
    \LComment{Long comment.}
    \State $x \gets 0$ \Comment{Short comment.}
\end{algorithmic}
    
\end{document}

您可能希望在本地保留更改。

\begin{algorithmic}
    \setkeys{algpx}{beginComment=//~}
    \setkeys{algpx}{beginLComment=/*~}
    \setkeys{algpx}{endLComment=~*/}        
    \LComment{Long comment.}
    \State $x \gets 0$ \Comment{Short comment.}
\end{algorithmic}

b

答案2

与此同时我找到了另一个答案。

我意识到在 中unicode-math定义\smalltriangleright(和其他符号)\AtBeginDocument。从文档

unicode 数学通过 定义宏\AtBeginDocument,即延迟定义直到\begin{document}满足。

因此,algpseudocodex之后的加载有效:

\documentclass{article}

\usepackage{unicode-math}
\setmainfont{XITS}
\setmathfont{XITS Math}

\AtBeginDocument{%
\usepackage[beginComment=$\smalltriangleright$~]{algpseudocodex}
}

\begin{document}
\begin{algorithmic}
    \State $x \gets 0$ \Comment{Short comment.}
\end{algorithmic}
\end{document}

相关内容