que principiantes plantilla para maketitle ejemplos documento descargar comandos php ubuntu latex pdflatex

principiantes - ¿Cómo puedo obtener PHP para compilar un documento LaTeX si(www-data) no puede acceder a los paquetes requeridos?



manual de latex para principiantes (4)

Tiene razón con la idea de sudo , pero para solucionar el problema de la contraseña, hay una solución simple.

www-data debe estar en la lista de sudoers, en etc/sudoers , y dentro de esta lista puede definir cómo se controlan los supercomandos. Es posible configurar www-data como un sudoer que no requiere una contraseña ... pero esa no es una idea muy inteligente en términos de seguridad. Por lo tanto, en la lista de sudoers, puede especificar qué comandos puede ejecutar el usuario. Permitir solo el comando /usr/bin/latexmk evitará problemas de seguridad y permitirá que su servidor web ejecute supercomandos sin una contraseña.

Consulte esta página de ayuda para Ubuntu: https://help.ubuntu.com/community/Sudoers , especialmente la sección NOPASSWD.

El ejemplo en tu caso sería:

# This lets "www-data" user run a command without a password www-data mark-computer= NOPASSWD: /usr/bin/latexmk

Tengo un script PHP que compila documentos LaTeX con el uso de:

exec(''cd /path/to/doc && /usr/bin/latexmk -pdf filename.tex'');

Esto funciona para algunos de mis documentos LaTeX, pero mi último documento no se compila y un vistazo al registro revela:

!pdfTeX error: pdflatex (file ecrm1000): Font ecrm1000 at 600 not found ==> Fatal error occurred, no output PDF file produced!

Lo que he encontrado es el resultado de que LaTeX no puede ver los paquetes de fuentes requeridos. Cuando ejecuto el mismo comando de compilación bajo mi nombre de usuario, el documento se compila como debería. Entonces mi pregunta es, ¿cómo puedo obtener PHP (ejecutándose como www-data) para tener acceso a los paquetes LaTeX necesarios?

Intenté instalar el paquete requerido en la cuenta www-data usando:

sudo -u www-data sudo apt-get install texlive-fonts-recommended

pero requiere la contraseña de www-data, que no creo que haya sido establecida por mí y no es algo que le haya echado.

Estoy ejecutando Ubuntu 12.04 si es de alguna ayuda.


Esto es lo que eventualmente hizo funcionar la compilación.

Debajo de mi carpeta de inicio había una carpeta oculta que LaTeX estaba usando para almacenar las fuentes que necesitaba ~/.texmf-var . Esta carpeta contenía fonts/pk/ljfour/jknappen/ec y había 13 archivos de fuentes (algunos de los cuales latexmk se quejaban).

La solución fue hacer que PHP generara el archivo LaTeX que quería compilar (file.tex) en un directorio temporal (donde había copiado las fuentes) donde serían compilados y luego trasladado a donde yo quería almacenar los PDF de salida. Explicaré con un ejemplo:

file_put_contents(''~/website/latexFiles/temp/file.tex'', $latex_data); exec(''/usr/bin/latexmk -pdf -cd ~/website/latexFiles/temp/file.tex''); exec(''mv ~/website/latexFiles/temp/file.pdf ~/website/pdfs/desiredFilename.pdf''); exec(''rm ~/website/latexFiles/temp/file.*'');

Entonces, la primera línea genera el archivo de látex en el directorio donde voy a compilar en PDF (donde $ latex_data es una cadena que contiene el documento LaTeX que quiero crear).

Ahora, la parte que hace que todo esto funcione es crear un directorio en ~/website/latexFiles/temp llamado $HOME . Luego copiando (o tal vez enlazando, pero copié) ~/.texmf-var en ~/website/latexFiles/temp/$HOME . Esta es la ruta que latexmk buscará para las fuentes que necesita. Use el modificador -cd para que latexmk se mueva a ~/website/latexFiles/temp antes de tratar de compilar el archivo LaTeX, donde luego podrá refinar las fuentes.

La tercera línea copia el archivo .pdf a donde finalmente quería el archivo de salida y la última línea elimina todos los archivos restantes del directorio temporal con el mismo nombre de archivo. Me aseguro de usar nombres de archivo únicos para los archivos .tex , por lo que no eliminaré archivos que otro usuario pueda estar generando.

Ojalá alguien más lo encuentre útil.


sudo mktexpk --destdir /usr/share/texmf-texlive/fonts/pk/ljfour/jknappen/ec/ --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 ecrm1000

... hace que la fuente esté disponible para todos los usuarios (igual que en missingfont.log pero con el argumento --destdir).


Corro con un problema similar y fue resuelto estableciendo la variable de entorno $HOME en /var/www en un shell-script que invocó pdflatex (o creo que cualquier carpeta que se pueda escribir en www-data está bien aquí). Vea los detalles en TeX.SX.