2015-04-16 4 views
2

Я пытаюсь использовать make-файл, чтобы скомпилировать мою историю в LaTex. Я пытаюсь использовать переменную, чтобы завершить имя файла для моей истории. Если я просто запускаю make, он работает. Тем не менее, мне нужно иметь возможность запускать определенную команду из make.Makefile добавляет пробелы в переменные

pdflatex "\\def\\isdraft{1} \\input{FMPGC.tex}" 

Как создать переменную из PROJ + OBJS, так что я мог бы сделать что-то вроде того, что я пытаюсь сделать ниже. Если я запустил код ниже для создания черновика, он выйдет из строя и ПРИНИМАЕТ, что он добавляет многочисленные пробелы между FMPGC и tex.

Как объединить две переменные с символом "." символ между парой, поэтому я могу скомпилировать свою историю в команде ниже. Я также экспериментировал с тем, чтобы не ускользнуть от \ символов и, похоже, не имеет никакого эффекта.

# This makefile compiles my story using LaTex 
# Author: 
# 

# VARS - Variables to be changed for reuse of my script 
PROJ = "FMPGC"   # The name of the project 
OBJS = "tex"   # The extension for the content 
AUXS = "aux"   # The aux extensions 
CHAP = "chapters/"  # The chapters 
FOO = $(PROJ) += "." 
F002 = $(FOO) += $(OBJS) 

# Configuration: 
CC = pdflatex # The compiler 

# Rules 
all: 
    $(CC) $(PROJ).$(OBJS) 
draft: 
    $(CC) "\\def\\isdraft{1} \\input{$(FOO2)}" 

Текущая ошибка приходит от него ничего не вводя в переменную, как прямо сейчас -

pdflatex  "\\def\\isdraft{1} \\input{}" 

Ниже, кажется, точный вопрос.

<*> \def\isdraft{1} F 
        MPGC.tex 

---------------- Обновленный Make File

# This makefile compiles my story using LaTex 
# Author: 
# 

# VARS - Variables to be changed for reuse of my script 

# The name of the project 
PROJ:=FMPGC 
# The extension for the content 
OBJS:=tex 
# The aux extensions 
AUXS:=aux 
# The chapters 
CHAP:=chapters/ 

# Configuration: 
# The compiler 
CC=pdflatex 

# Rules 
all: 
    $(CC) $(PROJ).$(OBJS); 
draft: 
    $(CC) "\def\isdraft{1} $(PROJ).$(OBJS)"; 

Обновлено Ошибка ----

pdflatex "\def\isdraft{1} FMPGC.tex"; 
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex) 
restricted \write18 enabled. 
entering extended mode 
LaTeX2e <2014/05/01> 
Babel <3.9k> and hyphenation patterns for 21 languages loaded. 

! LaTeX Error: Missing \begin{document}. 

See the LaTeX manual or LaTeX Companion for explanation. 
Type H <return> for immediate help. 
...            

<*> \def\isdraft{1} F 
        MPGC.tex 
? 
! Emergency stop. 
...            

<*> \def\isdraft{1} F 
        MPGC.tex 
! ==> Fatal error occurred, no output PDF file produced! 
Transcript written on texput.log. 
+0

Что происходит с строками 'FOO = $ (PROJ) + =". "И' F002 = $ (FOO) + = $ (OBJS)? Что вы там пытаетесь сделать? Также почему вторая строка 'F002', а не' FOO2'? (Кажется, вы используете '$ (FOO2)' в задаче 'draft'.) –

+0

Я удалил этот раздел. Я пытался объединить две переменные, поэтому он становится именем файла с помощью. между. Пожалуйста, ознакомьтесь с моими ошибками и изменениями, внесенными мной в редактирование. – ILikeTurtles

+1

Командная строка выглядит нормально, только ошибка имеет нечетное расстояние (и это может быть вещь pdflatex). Являются '\ def \ isdraft {1}', и имя файла должно быть единственным аргументом для 'pdflatex'? –

ответ

0

Благодаря @Etan Reisner я смог исправить это после рассмотрения документации.

Мой файл делают теперь выглядит следующим образом -

# This makefile compiles my story using LaTex 
# Author: 
# 

# VARS - Variables to be changed for reuse of my script 

# The name of the project 
PROJ:=FMPGC 
# The extension for the content 
OBJS:=tex 
# The aux extensions 
AUXS:=aux 
# The chapters 
CHAP:=chapters/ 

# Configuration: 
# The compiler 
CC=pdflatex 

# Rules 
all: 
    $(CC) $(PROJ).$(OBJS); 
draft: 
    $(CC) "\def\isdraft{1} \input{$(PROJ).$(OBJS)}"; 

теперь я могу скомпилировать мой документ, и это добавляет свою переменную для использования внутри латексных.

2

В разделе The Two Flavors of Variables GNU make Manual:

Если вы положили пробел в конце переменной value e, это хорошая идея оставить комментарий, подобный этому в конце строки, чтобы сделать ваше намерение понятным. И наоборот, если вы не хотите, пробельные символов в конце вашего переменного значения, вы должны помнить, чтобы не поставить случайный комментарий в конце строки после некоторого пробела, например, как это:

dir := /foo/bar # directory to put the frobs in 

Здесь значение переменной dir равно '/ foo/bar' (с четырьмя конечными пробелами), что, вероятно, не было целью. (Представьте себе что-то вроде «$ (dir)/file» с этим определением!)

+0

Я удалил все пробелы, но он все еще не работает. Теперь кажется, что существует пробел между F и MPGC для var PROJ, но это, очевидно, не так. – ILikeTurtles

+0

Обновление сообщения с отредактированным файлом makefile (добавьте его не удалять текущее содержимое) и новый ошибочный вывод из запуска 'make'. –

+0

См. Исправленное сообщение выше. – ILikeTurtles