HtLaTeX - 使用相对路径时出现问题

HtLaTeX - 使用相对路径时出现问题

我目前正在开发一个叫做离线博客引擎的小东西。我的想法是用简单的 (La)TeX 文件编写文章,并创建一些包含博客文章的静态 HTML 文件。

基础结构是用 Ant 脚本编写的。目前,我无法让 HtLaTeX 在我的 Windows 7 机器上运行(使用 MiKTeX 2.9)。

如果我在 CLI 中处于包含文章的目录中,HtLaTeX 就可以正常工作。例如,如果我当前在目录中,C:\users\me\articles\并且有一篇文章article.tex

C:\users\me\articles$> htlatex article.tex

运行良好。它将公式生成为 PNG,创建文件css并将其放在当前目录中。

如果我在一个完全不同的目录中,并使用绝对路径调用 HtLaTeX,它就不起作用。所以,

 C:\users\me\other\dir$> htlatex C:\uisers\me\articles\article.tex

仅生成包含以下信息的日志文件:

This is pdfTeX, Version 3.1415926-2.4-1.40.13 (MiKTeX 2.9) (preloaded format=latex 2013.8.3)  18 AUG 2013 11:20
entering extended mode
**\makeatletter\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx\HCode\def\HCod
e##1{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\g
@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\doc
umentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname te
x4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HC
ode}{\documentstyle[tex4ht]}}}\makeatother\HCode html.a.b.c.\input  e:\Users\zo
mbie\Documents\Blog\articles\Zukunftsplanung.tex

! Emergency stop.
<*> ...keatother\HCode html.a.b.c.\input  c:\Users
                                              \me\articles\art...
End of file on the terminal!


Here is how much of TeX's memory you used:
 4 strings out of 493922
 56 string characters out of 3144897
 49031 words of memory out of 3000000
 3403 multiletter control sequences out of 15000+200000
 3640 words of font info for 14 fonts, out of 3000000 for 9000
 841 hyphenation exceptions out of 8191
 4i,0n,3p,1b,8s stack positions out of 5000i,500n,10000p,200000b,50000s
 No pages of output.

如果我使用相对路径,则会生成更多文件(如 DVI 文件),但 html 文件和数学公式也会丢失。

知道这里出了什么问题吗?问题出在 Ant 脚本和 CLI 中。

更新: 虽然转义反斜杠不起作用,但用常规斜杠替换它们是可行的。(正如 David Carlisle 所建议的)但公式的 PNG 丢失了。在输出中它们已生成,但我找不到它们。

该命令如下所示:

C:\users\me\other\dir$> htlatex C:\users\me\articles\article.tex "html" "" "-dC:\users\me\articles\html"

在 ant 脚本中它不起作用,因为 ant 自动使用当前系统的路径分隔符,而在 Windows 上它是反斜杠。(没问题,这个调用可以用批处理文件代替。)

答案1

! Emergency stop.
<*> ...keatother\HCode html.a.b.c.\input  c:\Users
                                              \me\articles\art...

表示路径正在传递给 TeX,这\将导致错误。你可以/使用

htlatex C:/uisers/me/articles/article.tex

尽管让脚本分割文件路径、cd 到相关目录然后使用本地名称可能会更加强大。

答案2

我最终编写了一个小批处理脚本来解决 Windows 上 htlatex 的限制:

@echo off
set START_DIR=%~dp0
set ARTICLESDIR=%1
set TARGET_DIR=%2

cd %ARTICLESDIR%
for /f %%f in ('dir /b *.tex') do @htlatex %%f

echo ...build web sites

echo starting coping process to %TARGET_DIR%

for /f %%f in ('dir /b *.png') do xcopy %%f %TARGET_DIR%\img /C /Y
for /f %%f in ('dir /b *.css') do xcopy %%f %TARGET_DIR%\css /C /Y
for /f %%f in ('dir /b *.html') do xcopy %%f %TARGET_DIR%\ /C /Y
echo ...moved web site

del *.png
del *.html
del *.css
del *.4ct
del *.4tc
del *.aux
del *.dvi
del *.idv
del *.lg
del *.log
del *.tmp
del *.xref

echo ...removed meta files

echo ...finished building html files
cd %START_DIR%

我在我的 Ant 脚本中这样称呼它:

    <exec executable="build.webpages.bat">
        <arg value="${articles.dir}" />
        <arg value="${basedir}\${build.dir}" />
    </exec>

如果你正在寻找一个在 unixoid 系统上运行的脚本,请查看 make4ht

相关内容