I successfully compiled my program. Now how do I run it?

后端 未结 2 392
醉话见心
醉话见心 2020-12-31 03:28

I want to solve Project Euler Problem 1:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these

相关标签:
2条回答
  • 2020-12-31 03:50

    You can't run pdf files. You need to use the latex command instead of pdflatex. e.g.

    latex Problem1.tex
    

    Here's some documentation

    0 讨论(0)
  • 2020-12-31 03:58

    So, today seems to be a safe day to tackle this problem...


    The OP does not seem to be quite so PDF-savvy. However, he obviously is quite a literate LaTeX guy. Which means, he also must be knowing TeX very well, given he is so much of a Donald Knuth admirer...

    So much for the preliminaries. Now for the real meat.

    First, to quote the official PDF-1.7 specification document:

    PDF is not a programming language, and a PDF file is not a program.
                                                                                                                (p. 92, Section 7.10.1)

    However, the pre-decessor of the PDF format, PostScript, IS a Turing-complete programming language... Turing-complete, just as TeX is, the creation of Donald Knuth, one of the greatest computer scientists of all time.

    PostScript files, on the other hand, ARE programs, and can easily be executed by PostScript printers (though this execution time cannot reliably be determined in advance).

    Hence, and second, the OP should be able to find a way to convert his hi-level LaTeX code to low-level TeX code. That code needs to emit a PostScript program, which in turn can be executed by a PostScript printer. Writing that TeX code should be trivial for somebody like the OP, once he is given the PostScript code that should be the result of his TeX code.

    I myself am not so well-versed with the TeX aspect of that problem solving procedure. However, I can help with the PostScript.

    The PostScript which the OP's TeX code should produce goes like this (there are for sure more optimized versions possible -- this is only a first, quick'n'dirty shot at it):

    %!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
    

    Send this PostScript code to a PostScript printer, and it will compute and print the solution.


    Update

    To answer one of the comments: If you replace the last section of PostScript code starting with /Helvetica findfont with a simple print statement, it will not do what you might imagine.

    print does not cause the printer to output paper. Instead it asks the PostScript interpreter to write the topmost item on the stack (which must be a (string)!) to the standard output channel. (If the topmost item on the stack is not of type (string), it will trigger a typecheck PostScript error.)

    So sending a modified PostScript file (where print has replaced the last section of my PS code) to the printer will not work (unless that printer supports the interactive executive PostScript mode -- which is not a standard part of the PostScript language). It will work however if you feed that file to Ghostscript in a terminal or cmd.exe window.

    0 讨论(0)
提交回复
热议问题