如何在 algorithm2e 中使用类似“\SetProgSty”来设置 KwProg arg 字体样式?

如何在 algorithm2e 中使用类似“\SetProgSty”来设置 KwProg arg 字体样式?

我关注了一些 QA 链接,例如在 tex stackexchange 中使用此示例 tex 代码:

\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[algosection, boxruled, linesnumbered]{algorithm2e}

\SetProcNameSty{textbf}
\SetProcArgSty{textbf}
\SetProgSty{textbf}

\begin{document}
\begin{procedure}
\SetKwProg{Fn}{Function}{ is}{end}
\Fn{afunc(i: int) : int}{return 0\;}
    \caption{removemarked()}
    \label{alg:removemarked}

\end{procedure}
\end{document} 

我还查看了官方文件

\SetKwProg{Prog}{Title}{is}{end} Env 是一个以“Title”(CapSty 样式)开头的块,后面跟着ProgSty 中的参数后跟“is”,然后是块内的“text”,以“end”结尾。

在输出 pdf 中,程序字体已被修改为粗体,\SetProcNameSty{textbf}但 KwProg 参数afunc(i: int) : int还没有改变ProgSty在此处输入图片描述

一种解决方法:

然后我尝试使用直接格式化 arg 文本\bfseries,即\Fn{\bfseries afunc(i: int) : int}{return 0\;},它按预期工作。 在此处输入图片描述

问:如何使用KwProg类似的方法设置 arg 字体样式\SetProgSty,例如通过使用上面的方法修改默认斜体textbf

答案1

添加\renewcommand{\SetProgSty}[1]{\renewcommand{\ProgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%之后\SetProgSty{textbf},问题就解决了。


也许这个问题太具体了,不是一个好问题。然后我花了一些时间重新检查它,因为它已经有一段时间没有回复了。

灵感来自,我查看了algorithm2e代码(抱歉发帖时没看,等我编程时间长了再考虑寻求代码帮助),发现

\newcommand{\ProgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetProgSty{emphg} 
\newcommand{\SetProgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}%
...
\newcommand{\SetKwProg}[4]{%\SetKwProg{Env}{Title}{is}{end} 
    \algocf@newcmdside@koif{#1}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }\ProgSty{##2}\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4}}%

因为\SetKwProg用了\ProgSty但是\SetProgSty没有按照代码改,所以原来的\SetProgSty不行,于是就想到了上面的解决办法。

希望这可以为未来的读者提供帮助。

相关内容