ShareLatex - 将带有 algorithm2e 的 .tex 导入/包含到另一个带有 prosa 的 .tex 中时出错

ShareLatex - 将带有 algorithm2e 的 .tex 导入/包含到另一个带有 prosa 的 .tex 中时出错

我正在使用 ShareLatex。我有一个 .tex,其中包含一些使用 algorithm2e 包的伪代码。如下所示:

\documentclass[11pt, a4paper]{article}
\usepackage[portrait, margin=1in]{geometry}
\usepackage{amsmath}
\usepackage[linesnumbered,ruled]{algorithm2e}

\begin{document}
\begin{algorithm}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}

\underline{function AlgoTest} $(G)$\;
\Input{bla}
\Output{blubb}
Let $v$ be a vertice $\in V$\;

\ForEach{Vertex $v \in G$}
{
    \tcp{doSth}
}
return $G$\;
\caption{blaBlubb}
\end{algorithm}
\end{document}

它编译得很好,看起来就像我想要的那样。我现在有几个这样的文件,其中包含自己的算法。我现在想将此代码包含到我的工作/散文文本中,我希望它看起来与上面的代码完全一样。请注意,上面的代码有自己的命令,如 usepackage,它非常适合对单个代码文件(我指的是上面的代码文件)进行无错误编译。

所以我在以下 tex 文件中进行了如下操作:

\documentclass{article}
\usepackage[subpreambles=true]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{import}

\begin{document}

\import{./}{algotest.tex}

\end{document}

编译时看起来也很好,没有问题,但是 ShareLatex 给出了编译错误:

/usr/local/texlive/2014/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty,第 1177 行

未定义控制序列。

编译器无法理解您使用的命令。请检查命令拼写是否正确。如果命令是软件包的一部分,请确保您已使用 \usepackage{...} 将该软件包包含在您的前言中。了解更多此提示是否有帮助?是/否

\设置AlgoLined

l.1177 ...etcount,titlenotnumbered,lined,shortend} % 错误消息顶行末尾的控制序列从未被 \def'ed。如果您拼错了它(例如,\hobx'), typeI' 和正确的拼写(例如,`I\hbox')。否则继续,我会忘记未定义的任何东西。

! 未定义控制序列。\SetAlgoShortEnd

给出的部分日志输出如下:

LaTeX 信息:重新定义输入行 2665 上的 [。LaTeX 信息:重新定义输入行 2666 上的 ]。)(/usr/local/texlive/2014/texmf-dist/tex/latex/algorithm2e/algorithm2e.sty 包:algorithm2e 2013/01/06 v5.00 算法环境 \c@AlgoLine=\count107(/usr/local/texlive/2014/texmf-dist/tex/latex/base/ifthen.sty 包:ifthen 2014/09/29 v1.1c 标准 LaTeX ifthen 包 (DPC))!未定义控制序列。\SetAlgoLined

l.1177 ...etcount,titlenotnumbered,lined,shortend} % 错误消息顶行末尾的控制序列从未被 \def'ed。如果您拼错了它(例如,\hobx'), typeI' 和正确的拼写(例如,`I\hbox')。否则继续,我会忘记未定义的任何东西。

! 未定义控制序列。\SetAlgoShortEnd

l.1177 ...etcount,titlenotnumbered,lined,shortend} % 错误消息顶行末尾的控制序列从未被 \def'ed。如果您拼错了它(例如,\hobx'), typeI' 和正确的拼写(例如,`I\hbox')。否则继续,我会忘记未定义的任何东西。

(/usr/local/texlive/2014/texmf-dist/tex/latex/tools/xspace.sty 软件包:xspace 2014/10/28 v1.13 命令名称后的空格(DPC、MH))(/usr/local/texlive/2014/texmf-dist/tex/latex/relsize/relsize.sty 软件包:relsize 2013/03/29 ver 4.1)


软件包“algorithm2e”发布 5.0 -- 2013 年 1 月 6 日 -- -[电子邮件保护]发布公告邮件列表 -[电子邮件保护]通过电子邮件订阅有关软件包讨论的邮件列表[电子邮件保护]点击“订阅” - 作者:Christophe Fiorio ([电子邮件保护]


希望有办法解决编译错误。如果有任何信息缺失,请直接请求。提前致谢。

答案1

我现在正在使用以下解决方法(我这样称呼它是因为它会导致情况)。

  • 每个算法都有自己的 tex 文件,但没有任何前言,也没有包含内容等。
  • 这样我就无法直接编译这些文件,而需要另一个使用 \input 的 tex 和所有必要的包含来编译这个文件
    • 这很麻烦,因为我总是需要更改编译的文本,而伪代码只需要稍微修改一下

这样我的代码文本就看起来像这样:

\begin{algorithm}
...
\end{algorithm

这些“wrapper-tex”看起来像这样:

\documentclass[12pt, letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage{import}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage[linesnumbered,ruled]{algorithm2e}

\begin{document}

\import{Algo}{MyAlgo.tex}

\end{document}

为了不获取周围文档的行距,我在取消输入代码之前使用 \renewcommand,并在输入代码之后再次将其设置回原位。当代码不适合行时,Latex 显示文本,这实际上发生在输入之后,代码本身之前(如果有足够的空间用于文本,但没有空间用于代码,则在上一页)。我通过在输入代码后添加 \newpage 来解决这个问题。

使用 include 根本不会显示我的伪代码。我的 include 如下所示:

\begin{flushleft}

some text
...
again some text

\renewcommand{\baselinestretch}{1.0}

\input{Algo/MyAlog.tex}

\renewcommand{\baselinestretch}{1.5}


\newpage

againagainsometext
...
u know
\end{flushleft}
...

我也遇到了问题,因为在文本的 tex 中我定义了 12pt 字体大小,而我最初在代码包装器中没有这样做。这样输入的伪代码被放大了。使用这些建议调整大小 减少伪代码字体大小(非全局) 或者其他的并没有太大的帮助,我尝试了一个多小时后放弃了,所以我通过将其分成多个/单独的算法并删除代码注释来减少我的伪代码。

相关内容