为什么当我尝试将 tex 字符串发送到 pdflatex 可执行文件时会出现错误?

为什么当我尝试将 tex 字符串发送到 pdflatex 可执行文件时会出现错误?

根据帮助文件:

    $ pdflatex --help
    Usage: pdftex [OPTION]... [TEXNAME[.tex]] [COMMANDS]
       or: pdftex [OPTION]... \FIRST-LINE
       or: pdftex [OPTION]... &FMT ARGS
      Run pdfTeX on TEXNAME, usually creating TEXNAME.pdf.
      Any remaining COMMANDS are processed as pdfTeX input, after TEXNAME is read.
      If the first line of TEXNAME is %&FMT, and FMT is an existing .fmt file,
      use it.  Else use `NAME.fmt', where NAME is the program invocation name,
      most commonly `pdftex'.

      Alternatively, if the first non-option argument begins with a backslash,
      interpret all non-option arguments as a line of pdfTeX input.

“如果第一个非选项参数以反斜杠开头,则将所有非选项参数解释为一行 pdfTex 输入。”

好吧,我有一个我知道可以工作的 tex 文档。由于我试图将多个 tex 文档打印为 pdf,我认为最好将文档作为字符串存储在内存中,然后将字符串直接发送到可执行文件,而不是反复读取我的模板文件。

我尝试通过命令行来测试这一点:

pdftex \documentclass{book}   \usepackage{graphicx} \usepackage[absolute]{textpos}  \usepackage{fancyhdr} \pagestyle{fancy}  \usepackage{xcolor,colortbl} \definecolor{DarkGray}{rgb}{0.7,0.7,0.7} \definecolor{LightGray}{rgb}{0.93,0.93,0.93} \definecolor{LightCyan}{rgb}{0.88,1,1} \definecolor{White}{rgb}{.99,.99,.99}  \begin{document}  \pagenumbering{gobble} \begin{textblock}{150}(0,0.3)    \includegraphics[width=50mm]{images/logo.jpeg}  \end{textblock}  \begin{textblock}{150}(11,11.5)    \includegraphics[width=50mm]{images/watermark_uw.jpg}  \end{textblock}  \begin{textblock}{150}(3,2)     \mbox{\large{\textbf{NAME:}}} %NAME HERE \end{textblock}  \begin{textblock}{150}(6,2)   \mbox{\large{\textbf{Heather Steinmetz  }}} %NAME HERE \end{textblock}  {\renewcommand{\arraystretch}{2}% \begin{textblock}{400}(3,3.5)     \setlength\arrayrulewidth{1.0pt}    \begin{table}[h]    \begin{tabular}{c>{\hspace{3pc}}c>{\hspace{3pc}}c<{\hspace{20pt}}}      \rowcolor{DarkGray}         \hline          \textbf{\large{Time Slot}} & \textbf{\large{Meeting With}} & \textbf{\large{Location}} \\[5pt]  \hline          \rowcolor{LightGray}  1030 to 1100 & Alex Williams & DC2119 \\ \hline       \rowcolor{White}  1100 to 1130 & Unscheduled &  \\ \hline       \rowcolor{LightGray}  1130 to 1200 & Yasha Pushak & DC2119 \\ \hline        \rowcolor{White}  1300 to 1330 & Unscheduled &  \\ \hline               \rowcolor{White} & & \\     \end{tabular}   \end{table} \end{textblock}  \fancyhf{} % sets both header and footer to nothing \renewcommand{\headrulewidth}{0pt}  \rfoot{\mbox{519-988-4567 | uwaterloo.ca | 200 UNIVERSITY AVENUE WEST, WATERLOO, ON. CANADA N2L 3G1}}  \end{document}

但是,我无法使用此方法让 pdflatex 创建 pdf。它总是出错并显示:

$ pdftex \documentclass{article} \begin{document} \end{document}
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)
entering extended mode
! I can't find file `documentclass{article}'.
<*> documentclass{article} 
                       begin{document} end{document}

我究竟做错了什么?

编辑

总结一下我解决问题的步骤:(感谢egreg的回答和Warren的评论)

  1. 将字符串发送到pdflatex,而不是pdftex就像帮助文件中所说的那样。

  2. 将字符串放在引号内。请使用单引号,不要使用双引号,因为单引号会按原样保留字符串(不处理特殊字符)。

  3. 删除换行符。我使用 PHP 中的字符串替换完成了此操作。

  4. 删除注释——用“%”符号表示。

除了 egreg 给出的答案之外,我还删除了发送给 pdflatex 的字符串中的所有换行符。

答案1

shell 将反斜杠解释为其处理的一部分,启动程序。你必须引用这个论点:

pdflatex "\documentclass{book}\begin{document}Hello world\end{document}"

不过,将所有文档都放在命令行中似乎不是一个好主意。

相关内容