以下 MWE 代码在 TexLive2018 中运行良好,但在“www.overleaf.com”(在线 Latex 平台)中无法运行。
\documentclass{article}
\ifx\conditionmacro\undefined
\immediate\write18{%
pdfLaTeX --jobname="\jobname1"
\gdef\string\conditionmacro{1}\string\input\space\jobname
}%
\immediate\write18{%
pdfLaTeX --jobname="\jobname2"
\gdef\string\conditionmacro{2}\string\input\space\jobname
}%
\immediate\write18{%
pdfLaTeX --jobname="\jobname3"
\gdef\string\conditionmacro{3}\string\input\space\jobname
}%
\expandafter\stop
\fi
\begin{document}
\ifnum\conditionmacro=1
Condition is 1
\fi
\ifnum\conditionmacro=2
Condition is 2
\fi
\ifnum\conditionmacro=3
Condition is 3
\fi
\verb|\conditionmacro| is \texttt{\meaning\conditionmacro}.
\end{document}
来自“www.overleaf.com”的原始日志如下:
这是 pdfTeX,版本 3.14159265-2.6-1.40.19(TeX Live 2018)(预加载格式=pdflatex 2019.8.28)2019 年 11 月 28 日 12:59 进入扩展模式 \write18 已启用。%&-line 解析已启用。 **main.tex (/compile/main.tex LaTeX2e <2018-12-01> (/usr/local/texlive/2018/texmf-dist/tex/latex/base/article.cls 文档类:article 2018/09/03 v1.4i 标准 LaTeX 文档类 (/usr/local/texlive/2018/texmf-dist/tex/latex/base/size10.clo 文件:size10.clo 2018/09/03 v1.4i 标准 LaTeX 文件 (size 选项) ) \c@part=\count80 \c@section=\count81 \c@subsection=\count82 \c@subsubsection=\count83 \c@paragraph=\count84 \c@subparagraph=\count85 \c@figure=\count86 \c@table=\count87 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 \bibindent=\dimen102 )runsystem(pdfLaTeX --jobname =“output1”\gdef \conditionmacro{1}\input output)..执行。
运行系统(pdfLaTeX --jobname="output2" \gdef \conditionmacro{2}\input output)..执行。
运行系统(pdfLaTeX --jobname="output3" \gdef \conditionmacro{3}\input output)..执行。
) 以下是您使用的 TeX 内存量: 198 个字符串,共 492616 个 2143 个字符串字符,共 6128979 个 59595 个字内存,共 5000000 个 4200 个多字母控制序列,共 15000+600000 个 3640 个字字体信息,共 14 种字体,共 8000000 个,用于 9000 个 1141 个连字例外,共 8191 个 23i、1n、17p、112b、36s 堆栈位置,共 5000i、500n、10000p、200000b、80000s
无输出页面。PDF 统计信息:1000 个 PDF 对象中有 0 个(最多 8388607 个)1000 个命名目标中有 0 个(最多 500000 个)10000 个 PDF 输出额外内存中有 1 个字(最多 10000000 个)
有人能帮帮我吗??
答案1
(Overleaf 支持团队的汤姆撰写。)
请注意,由于 Overleaf 的设置,虽然您可以pdflatex
在\immediate\write18
或中运行\ShellEsc
,但您必须小心文件名。也就是说,\jobname
设置为output
,但主文件保留其原始名称(main.tex
在下面的示例中)。
因此,依赖\input\jobname
确实是不可能的,我会避免使用\jobname
。还请注意,pdflatex
在 *nix 机器上 应该全部小写。最后但并非最不重要的是,访问运行生成的文件的唯一方法shell-escape
是通过日志和输出文件(权重新编译)>其他日志和文件。您已拥有所有test?.pdf
、test?.aux
和test?.log
文件。
最小示例(在 Overleaf 中调用main.tex
以使其工作):
\documentclass{article}
\usepackage[margin=5pt]{geometry}
\ifx\conditionmacro\undefined
\gdef\conditionmacro{0}
\immediate\write18{
pdflatex --jobname="test1" "\gdef\string\conditionmacro{1}\string\input\space main"
}
\immediate\write18{
pdflatex --jobname="test2" "\gdef\string\conditionmacro{2}\string\input\space main"
}
\immediate\write18{
pdflatex --jobname="test3" "\gdef\string\conditionmacro{3}\string\input\space main"
}
\fi
\usepackage{pdfpages}
\begin{document}
\centering\fontsize{40}{45}\bfseries
JOBNAME = \jobname\par
\ifcase\conditionmacro\relax
% = 0
\fbox{\includegraphics[width=9cm]{test1.pdf}}
\fbox{\includegraphics[width=9cm]{test2.pdf}}
\fbox{\includegraphics[width=9cm]{test3.pdf}}
\or
% = 1
Condition is 1
\or
% = 2
Condition is 2
\or
% = 3
Condition is 3
\fi
% \verb|\conditionmacro| is \texttt{\meaning\conditionmacro}.
\end{document}