Kann Latex auf online Quellen zugreifen?

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Axel_S
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Do 8. Feb 2018, 16:48

Kann Latex auf online Quellen zugreifen?

Beitrag von Axel_S »

Hi,

ich frage mich schon länger, ob es möglich ist, dass Latex auf Onlinequellen zugreift. Vielleicht vorab als Info: Ich nutze meist Overleaf zum Schreiben meiner Dokumente.
Möchte ich jetzt beispielsweise ein Bild in mehreren Projekten nutzen, muss ich dieses in jedes Projekt kopieren. Ändere ich das Bild später muss ich das auch in allen Projekten tun. Gleiches gilt natürlich auch für \newcommands oder ähnliches.

Daher fände ich es super wenn ich zum Beispiel sowas schreiben könnte:

\begin{figure}
\centering
\includegraphics{https://someinternetlocation/picture.png}
\caption{Caption}
\label{fig:my_label}
\end{figure}

oder auch

\input{https://someotherlocation/mymacros.tex}

Gibt es sowas, hat jemand ne Idee, wie man sowas machen könnte?
Danke und Gruß,
Axel


MoeWe
Forum-Meister
Forum-Meister
Beiträge: 801
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Kann Latex auf online Quellen zugreifen?

Beitrag von MoeWe »

Nein und ja.

Von sich aus kann TeX es nicht, aber es gibt mindestens zwei Workarounds, die jeweils ihre eigenen Probleme mitbringen.

Methode 1 ist in https://tex.stackexchange.com/q/5433/35864 gezeigt und braucht --shell-escape. Dann kann TeX nämlich beliebige Kommandozeilenbefehle ausführen und so auch eine Datei herunterladen und dann einbinden. Nachteil 1 ist, dass man da je nach Betriebssystem etwas basteln muss und dass es unter Umständen etwas tricky ist, das schön systemunabhängig zu lösen. Viel wichtiger ist aber Nachteil 2: Mit --shell-escape kann TeX beliebige Kommandozeilenbefehle ausführen. Das ist natürlich ein recht erhebliches Sicherheitsrisiko. Im schlimmsten Fall kapert ein Hacker ein beliebtes LaTeX-Paket, das Du lädst, schreibt ein paar \write18-Befehle rein und kann damit Deine Festplatte löschen, einen Trojaner herunterladen und starten oder sonstige Späßchen machen. Daher sollte man mit --shell-escape vorsichtig sein.

Methode 2 würde LuaTeX nutzen. Das ist im zweiten Codebeispiel in https://tex.stackexchange.com/a/331113/35864 in eine Methode eingebaut, die entweder --shell-escape oder Lua verwendet. Der "Nachteil" hier ist, dass Du LuaLaTeX nutzen musst. Das muss jetzt nicht unbedingt ein Problem sein, aber manche Menschen hängen noch an pdfLaTeX.

Zuletzt geändert von MoeWe am Fr 24. Jul 2020, 12:33, insgesamt 1-mal geändert.

gast

Re: Kann Latex auf online Quellen zugreifen?

Beitrag von gast »

MoeWe hat geschrieben:
Fr 24. Jul 2020, 11:50

Viel wichtiger ist aber Nachteil 2: **Mit `--shell-escape` kann TeX beliebige Kommandozeilenbefehle ausführen. Das ist natürlich ein recht erhebliches Sicherheitsrisiko.**

Wenn man solche Herunterladeaktionen aus dem Dokument heraus auslöst, sollte man auch unbedingt den Zieldateinamen explizit angeben. Sonst kann nämlich per Umleitung/link rewrite statt einer Datei blumentopf.png auch ganz schnell die Datei article.cls im aktuellen Verzeichnis landen. Und darin kann dann jede beliebige Sauerei angestellt werden.

Im ersten Beispiel wird das bei https://tex.stackexchange.com/a/331113/35864 auch nicht beachtet. Dort fehlt beim Aufruf von wget option -O mit Angabe einer Zieldatei.

Der Nachteil, die Zieldatei explizit anzugeben ist, dass wenn man stattdessen eine Fehlerseite bekommt, diese ebenfalls unter dem Namen gespeichert wird. Es kann also passieren, dass die Datei dann nicht in der Form weiterverarbeitet werden kann, die man erwartet. Das kann die Fehlersuche ganz schön erschweren.

Man kann wget, curl etc. auch in ein Verzeichnis schreiben lassen, das beim LaTeX-Lauf nicht durchsucht wird und von dort dann nur die erwartete Datei an das wirkliche Ziel verschieben, wenn diese tatsächlich geliefert wurde. Das (temporäre) Verzeichnis kann man dann löschen und wird so eventuelle Risiken los. Das verkompliziert den ganzen Prozess natürlich, erlaubt dafür aber auch sinnvolle Fehlerreaktionen, wenn der Download schief geht.

Ich würde aber empfehlen, das nicht wirklich in den LaTeX-Lauf zu integrieren, sondern eher in den build-Prozess. Manche Editoren bieten dafür Pre-Scripte. Für arara und ähnliche Programme könnte man sich passende Befehle/Module/Regeln definieren. Per PowerShell, Batch, Shell-Script etc. ist es ebenfalls kein großes Problem.


Axel_S
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Do 8. Feb 2018, 16:48

Re: Kann Latex auf online Quellen zugreifen?

Beitrag von Axel_S »

Hi,

danke für die schnelle Antwort ich werde mir das ansehen und gucken ob ich es umsetzen kann.
Ich werde mich mit dem Ergebniss melden.

Gruß, aXel


Axel_S
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Do 8. Feb 2018, 16:48

Re: Kann Latex auf online Quellen zugreifen?

Beitrag von Axel_S »

Zu meinem aktuellen Stand:
Ich habe mich am Beispiel von
https://tex.stackexchange.com/questions ... 113#331113 (2. Beispiel in der Antwort) orientiert und daraus folgenden Code gebastelt. Ich muss gestehen, dass ich nicht alle Teile der Antworten wirklich verstanden habe.

\documentclass{article}
\usepackage{inputenc}
\usepackage{graphicx} % includegraphics command is implemented here
\usepackage{ifluatex}

\directlua{
    tex.enableprimitives('', {'luaescapestring'})
}
\newcommand*{\Download}[2]{%
\IfFileExists{#1}{%
}{%
  \directlua{
    local io = require('io')
    local http = require('socket.http')
    local ltn12 = require('ltn12')
    local file_name = '\luaescapestring{#1}'
    local url = '\luaescapestring{#2}'
    texio.write_nl('Downloading: ' .. file_name)
    texio.write_nl('')
    http.request{
      url=url,
      sink=ltn12.sink.file(io.open(file_name, 'w'))
    }
  }%
}%
%\edef\DownloadFile{#1}%
}

\begin{document}
  \begin{figure}
    \centering
    \Download{esalogo2.png}{%
      https://esamultimedia.esa.int/docs/corporate/ESA_logo/ESA_logo_2020_Deep.png%
    }
    \includegraphics[width = \textwidth]{esalogo2.png}
  \end{figure}

% \begin{figure}
%     \centering
%     \Download{logo.png}{%
%       https://cdn.kika.de/logo/bilder/logo-logo-die-welt-und-ich100_v-tsmall169_w-600_zc-de31b940.png%
%     }
%     \includegraphics[width = \textwidth]{logo.png}
% \end{figure}


\end{document}

Für das erste Bild funktioniert es immer ohne Probleme. Beim zweiten geht es immer schief. Auch wenn ich das erste auskommentiere geht es nicht. Ich habe unterschiedlichste Bilder probiert. Das ESA Logo geht immer, alle anderen nicht.

Habt Ihr dazu eine Idee. Danke schonmal fürs schnelle Antworten.

wget und write18 hatte ich auch probiert, aber das ging nicht. Ich vermute, dass liegt an der Nutzung von Overleaf, bei welchem ich ja erstmal nur auf compile klicke und sonst nichts mitgebe. Aber mit der LulaTex Lösung wäre ich super zufrieden, wenn es denn auch zwei Bilder könnte :)

Viele Grüße, Axel


MoeWe
Forum-Meister
Forum-Meister
Beiträge: 801
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Kann Latex auf online Quellen zugreifen?

Beitrag von MoeWe »

Komischerweise funktioniert sogar das ESA-Beispiel bei mir nur mit

      sink=ltn12.sink.file(io.open(file_name, 'wb'))

statt sink=ltn12.sink.file(io.open(file_name, 'w')), also wenn wir die Datei als Binärdatei schreiben.

Mein Tipp für das Problem mit dem KIKA-Logo ist, dass es daran liegt, dass KIKA Dir das Logo nur via HTTPS schicken möchte, LuaTeX aber (soweit ich weiß) nur HTTP kann (das hat mich auch schonmal eine Paketfunktion gekostet). So gibt z.B. curl beim Versuch, das KIKA-Logo über HTTP zu holen

*   Trying 104.87.226.150...
* TCP_NODELAY set
* Connected to cdn.kika.de (104.87.226.150) port 80 (#0)
> GET /logo/bilder/logo-logo-die-welt-und-ich100_v-tsmall169_w-600_zc-de31b940.png HTTP/1.1
> Host: cdn.kika.de
> User-Agent: curl/7.55.1
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Location: https://www.kika.de/logo/bilder/logo-logo-die-welt-und-ich100_v-tsmall169_w-600_zc-de31b940.png
< Date: Fri, 24 Jul 2020 18:32:51 GMT
< Connection: close
< Access-Control-Max-Age: 86400
< Access-Control-Allow-Credentials: false
< Access-Control-Allow-Headers: *
< Access-Control-Allow-Methods: GET,POST
< Access-Control-Allow-Origin: *
< 
* Closing connection 0

aus. Das ESA-Logo dagegen gibts auch über HTTP

*   Trying 163.171.133.152...
* TCP_NODELAY set
* Connected to esamultimedia.esa.int (163.171.133.152) port 80 (#0)
> GET /docs/corporate/ESA_logo/ESA_logo_2020_Deep.png HTTP/1.1
> Host: esamultimedia.esa.int
> User-Agent: curl/7.55.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Fri, 24 Jul 2020 18:31:12 GMT
< Content-Type: image/png
< Content-Length: 66594
< Connection: keep-alive
< Server: PWS/8.3.1.0.8
< Last-Modified: Tue, 31 Mar 2020 09:58:47 GMT
< ETag: "5e831457-10422"
< Accept-Ranges: bytes
< Age: 48286
< Via: 1.1 PSdgflkfFRA1bc200:1 (W), 1.1 PSfgblPAR2iv73:2 (W)
< X-Px: ht PSfgblPAR2iv73CDG
< X-Ws-Request-Id: 5f1b28f0_PSfgblPAR2ki69_125417-49577
< Cache-Control: max-age=259200
<

Und in der Tat bekomme ich in Lua vom KIKA nur den HTTP-Statuscode "301" zurück und keine Daten.

Du brauchst also eine Möglichkeit, mit LuaTeX, Dateien über HTTPS (SSL/TLS) herunterzuladen. Mir ist dazu leider nichts bekannt.


Antworten