![ShareLatex - 将带有 algorithm2e 的 .tex 导入/包含到另一个带有 prosa 的 .tex 中时出错](https://linux22.com/image/346503/ShareLatex%20-%20%E5%B0%86%E5%B8%A6%E6%9C%89%20algorithm2e%20%E7%9A%84%20.tex%20%E5%AF%BC%E5%85%A5%2F%E5%8C%85%E5%90%AB%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%B8%A6%E6%9C%89%20prosa%20%E7%9A%84%20.tex%20%E4%B8%AD%E6%97%B6%E5%87%BA%E9%94%99.png)
我正在使用 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'), type
I' 和正确的拼写(例如,`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'), type
I' 和正确的拼写(例如,`I\hbox')。否则继续,我会忘记未定义的任何东西。! 未定义控制序列。\SetAlgoShortEnd
l.1177 ...etcount,titlenotnumbered,lined,shortend} % 错误消息顶行末尾的控制序列从未被 \def'ed。如果您拼错了它(例如,
\hobx'), type
I' 和正确的拼写(例如,`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 字体大小,而我最初在代码包装器中没有这样做。这样输入的伪代码被放大了。使用这些建议调整大小 减少伪代码字体大小(非全局) 或者其他的并没有太大的帮助,我尝试了一个多小时后放弃了,所以我通过将其分成多个/单独的算法并删除代码注释来减少我的伪代码。