我成功编译了我的程序。现在我该如何运行它?

时间:2015-04-01 02:32:40

标签: javascript pdf compilation

我想解决Project Euler Problem 1

  

如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23.

     

查找低于1000的3或5的所有倍数的总和。

这是我的代码:

\documentclass[10pt,a4paper]{article}
\usepackage{hyperref}
\newcommand*\rfrac[2]{{}^{#1}\!/_{#2}}
\title{Solution to Project Euler Problem 1}
\author{Aadit M Shah}
\begin{document}
\maketitle
We want to find the sum of all the multiples of 3 or 5 below 1000. We can use the formula of the $n^{th}$ triangular number\footnote{\url{http://en.wikipedia.org/wiki/Triangular_number}} to calculate the sum of all the multiples of a number $m$ below 1000. The formula of the $n^{th}$ triangular number is:

\begin{equation}
T_n = \sum_{k = 1}^n k = 1 + 2 + 3 + \ldots + n = \frac{n (n + 1)}{2}
\end{equation}

If the last multiple of $m$ below 1000 is $x$ then $n = \rfrac{x}{m}$. The sum of all the multiples of $m$ below 1000 is therefore:

\begin{equation}
m \times T_{\frac{x}{m}} = m \times \sum_{k = 1}^{\frac{x}{m}} k = \frac{x (\frac{x}{m} + 1)}{2}
\end{equation}

Thus the sum of all the multiples of 3 or 5 below 1000 is equal to:

\begin{equation}
3 \times T_{\frac{999}{3}} + 5 \times T_{\frac{995}{5}} - 15 \times T_{\frac{990}{15}} = \frac{999 \times 334 + 995 \times 200 - 990 \times 67}{2}
\end{equation}
\end{document}

我使用pdflatex成功编译了它:

$ pdflatex Problem1.tex
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Arch Linux) (preloaded format=pdflatex)
.
.
.
Output written on Problem1.pdf (1 page, 106212 bytes).
Transcript written on Problem1.log.

它生成了以下输出PDF文件以及一堆具有可怕扩展名的其他文件:

Solution to Project Euler Problem 1

如何运行此PDF文件以便计算解决方案?我知道问题的解决方案,但我想知道如何执行PDF文件来计算解决方案。

我更喜欢LaTeX而非其他编程语言的原因是因为它支持literate programmingDonald Knuth引入的编程方法,TeX是{{3}}的创建者,也是最伟大的计算机科学家之一有史以来。

编辑:能够在屏幕上或纸上打印计算出的解决方案也很不错。计算解决方案而不打印它对于加热房间很有用,但是随着夏季的开始和全球变暖,它已经很热了。此外,打印解决方案将教会我如何在LaTeX中编写一个hello world程序。

2 个答案:

答案 0 :(得分:5)

所以,今天似乎是解决这个问题的安全日......


OP似乎不是那么 PDF -savvy。 然而,他显然是一个有文化的 LaTeX 家伙。 这意味着,他也必须非常了解TeX,因为他是唐纳德·克努特的崇拜者......

预赛的内容很多。 现在是真正的肉。

首先引用 the official PDF-1.7 specification 文档:

  

PDF不是编程语言,PDF文件不是程序。
  (第92页,第7.10.1节)

然而,PDF格式的前身,PostScript, IS 一种 Turing-complete 编程语言......图灵-complete,就像 TeX 一样,创建了 Donald Knuth ,这是有史以来最伟大的计算机科学家之一。

PostScript文件,另一方面, ARE 程序,并且可以通过PostScript打印机轻松执行(尽管此执行时间无法提前确定)。 / p>

因此, 第二 ,OP应该能够找到将他的高级LaTeX代码转换为低级TeX代码的方法。 该代码需要发出PostScript程序,而PostScript程序又可以由PostScript打印机执行。 编写TeX代码对于像OP这样的人来说应该是微不足道的,一旦给他的PostScript代码应该是他的TeX代码的结果。

我自己并不熟悉问题解决程序的TeX方面。 但是,我可以帮助使用PostScript。

OP的TeX代码应该生成的PostScript是这样的(肯定有更多优化的版本可能 - 这只是第一次,快速的拍摄):

%!PS

% define variables
/n1 999 def
/t1 334 def
/n2 995 def
/t2 200 def
/n3 990 def
/s1  67 def
/t3   2 def

% run the computational code
n1 t1 mul
n2 t2 mul
n3 s1 mul
sub
add
t3    div

% print result on printer, not on <stdout>
/Helvetica findfont
24 scalefont
setfont
30 500 moveto
(Result for 'Project Euler Problem No. 1' :) show 
/Helvetica-Bold findfont
48 scalefont
setfont
80 400 moveto
(                   ) cvs show 
showpage

将此PostScript代码发送到PostScript打印机,它将计算并打印解决方案。


更新

要回答其中一条评论:如果您使用简单的/Helvetica findfont语句替换以print开头的PostScript代码的最后一部分,它将无法执行您想象的操作。

print不会导致打印机输出纸张。相反,它要求PostScript解释器将堆栈中最顶层的项(必须是(string)!)写入标准输出通道。 (如果堆栈中最顶层的项目不是(string)类型,则会触发typecheck PostScript错误。)

因此,将修改后的PostScript文件(其中print已替换我的PS代码的最后一部分)发送到打印机将无效(除非该打印机支持交互式 executive PostScript模式 - 这不是PostScript语言的标准部分)。但是,如果您将该文件提供给终端或cmd.exe窗口中的 Ghostscript ,它将会起作用。

答案 1 :(得分:2)

您无法运行pdf文件。您需要使用latex命令而不是pdflatex。 e.g。

latex Problem1.tex

Here's some documentation