algorithm2e:如何在SetKwInOut后添加空格?

algorithm2e:如何在SetKwInOut后添加空格?

使用 时algorithm2e,如果您使用\SetKwInOut,它会将参数放在冒号后面。

“数据”和“结果”后没有空格

这是一个 MWE:

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ruled,lined]{algorithm2e}

\begin{document}

\begin{algorithm}[ht]
    \SetKwInOut{Data}{Data}
    \SetKwInOut{Result}{Result}
    \Data{my data}
    \Result{my result}
    \caption{My algorithm}
\end{algorithm}

\end{document}

我想在前面添加一个空格我的数据我的结果

我该怎么办?

编辑

看来问题不是由 引起的algorithm2e,我已更新了 ,而是由 引起的microtype,我最初并没有怀疑过,因此没有将其添加到我的 MWE 中。

如果您使用microtype,解决方案是禁用算法的突出:

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ruled,lined]{algorithm2e}
\usepackage[final]{microtype}

\begin{document}

{\microtypesetup{protusion=false}
\begin{algorithm}[ht]
    \SetKwInOut{Data}{Data}
    \SetKwInOut{Result}{Result}
    \Data{my data}
    \Result{my result}
    \caption{My algorithm}
\end{algorithm}
\microtypesetup{protusion=true}}

\end{document}

我将对这两个回复表示赞同,并将 Werner 的回复标记为答案,因为它展示了如何自定义\SetKwInOut

答案1

\Data{~my data}最简单的方法是使用and自己添加空格\Result{~my result}(此处~插入一个不间断的单词间空格)。

在此处输入图片描述

\documentclass{article}

\usepackage[ruled,lined]{algorithm2e}

\begin{document}

\begin{algorithm}[ht]
  \SetKwInOut{Data}{Data}
  \SetKwInOut{Result}{Result}
  \Data{~my data}
  \Result{~my result}
  \caption{My algorithm}
\end{algorithm}

\end{document}

请注意,插入是除了定义的每个宏的定义中~现有的之外的(见下文)。~\SetKwInOut


\SetKwInOut如果您希望在序言中做出这些调整,这里是原始定义:

\newcommand{\SetKwInOut}[2]{%
  \sbox\algocf@inoutbox{\KwSty{#2\algocf@typo:}}%
  \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used
    \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}%
    \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}%
  \else% else keep the larger dimension
    \ifdim\wd\algocf@inoutbox>\inoutsize%
    \setlength{\inoutsize}{\wd\algocf@inoutbox}%
    \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}%
    \fi%
  \fi% the dimension of the box is now defined.
  \algocf@newcommand{#1}[1]{%
    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}%
    \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}%
    {\let\\\algocf@newinout\hangindent=\inoutindent\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~##1\par}% <--------
    \algocf@linesnumbered% reset the numbering of the lines
    \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}%
  }}%

箭头突出显示的行指向创建函数的位置。它~已插入到参数之前。但是,您可以复制并粘贴上述定义,将其更改\newcommand\renewcommand,将其包装在\makeatletter...\makeatother对中,然后更改间距以满足您的需要。

答案2

升级您的 版本algorithm2e.styCTAN 上的当前版本,2015 年 10 月 19 日发布的 5.1 版产生以下输出,其中包含一个额外的空格。

在此处输入图片描述

相关内容