Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Wie aktuellen Timestamp für pdfinfo (CreationDate) generieren?

  1. #1
    Registrierter Benutzer
    Registriert seit
    13.02.2011
    Beiträge
    31

    Wie aktuellen Timestamp für pdfinfo (CreationDate) generieren?

    Hallo LaTeX-Experten,

    für ein Xelatex-Dokument setze ich mit \hypersetup, pdfinfo { CreationDate={D:yyyymmddhhmmss} } momentan noch händisch einen Zeitpunkt für die Pdf-Generierung. Das würde ich gern automatisch vom Compiler erledigen lassen.
    Es klappt aber nur zur Hälfte, sprich, für das Datum - "20150901" - nicht für den Rest.
    Gebe ich die Variablen später im Dokument aus, sind diese korrekt.

    Dazu ein Minibeispiel:
    Code:
    %!TEX TS-program = xelatex
    %!TEX encoding = UTF-8
    
    \documentclass[fontsize=11pt]{scrartcl}
    
    \newcommand{\SumOne}{John Doe}
    \usepackage{xltxtra}
    
    % ----Versuch------------
    \usepackage{datetime}
    \settimeformat{hhmmsstime}
    \renewcommand{\timeseparator}{}
    % Cf. http://tex.stackexchange.com/a/237251
    \def\datestamp{\leavevmode\hbox{\the\year\twodigits\month\twodigits\day}}
    \def\twodigits#1{\ifnum#1<10 0\fi\the#1}
    \newcommand{\ModStamp}{\datestamp\currenttime}
    % ---- bis hier ---------
    
    \setmainfont{Consolas}
    
    \usepackage{hyperref}
    \hypersetup{
       pdfauthor={\SumOne},
       pdfinfo={
          CreationDate={D:20150901200000},    % Inhalt von \ModStamp
          ModDate={D:\datestamp\currenttime}  % klappt auch nicht, "\datestamp" allein schon
       },
       pdftitle={Minibeispiel}
    }
    \setlength{\parindent}{0pt}
    
    %---------------BEGIN DOCUMENT-----------
    \begin{document}
    \textbackslash ModStamp: "{}\ModStamp"{}
    \newline
    \textbackslash currenttime: "{}\currenttime"{}
    \end{document}
    Ich teste die Eigenschaften mit SumatraPDF 3.0.

    Wo liegt der (Denk-)Fehler?
    Danke für eure Unterstützung!
    Geändert von casualcoder (02-09-2015 um 09:20 Uhr) Grund: Tippfehler

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Zitat Zitat von casualcoder Beitrag anzeigen
    für ein Xelatex-Dokument setze ich mit \hypersetup, pdfinfo { CreationDate={D:yyyymmddhhmmss} } momentan noch händisch einen Zeitpunkt für die Pdf-Generierung. Das würde ich gern automatisch vom Compiler erledigen lassen.
    Ja warum lässt Du den Compiler denn nicht? CreationDate wird AFAICS bereits korrekt belegt, wenn Du pdfinfo={...} aus dem \hpersetup einfach weglässt ...
    Zitat Zitat von casualcoder Beitrag anzeigen
    Es klappt aber nur zur Hälfte, sprich, für das Datum - "20150901" - nicht für den Rest.
    Gebe ich die Variablen später im Dokument aus, sind diese korrekt.
    Sieht so aus, als wäre \currenttime nicht expandierbar, was die ganzen `Token not allowed in a PDF string'-Meldungen erklären würde, die Du bekommen dürftest.
    Du könntest es mit dem datetime-Nachfolger datetime2 versuchen (NB: das stellt übrigens auch einen \DTMtwodigits-Befehl zur Verfügung, d.h. einen eigenen \twodigits bräuchtest Du damit nicht), dessen Makros sind größtenteils als expandierbar definiert, AFAICS.

    VG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer
    Registriert seit
    13.02.2011
    Beiträge
    31
    Noch bin ich nicht so weit, aber später würde ich CreationDate gern auf ein früheres Datum und ModDate auf den exakten Kompilier-Zeitpunkt setzen.

    Mit datetime2 tue ich mir schwer, mir fehlen Praxisbeispiele (anders als für datetime) da ich kein Experte bin. (Und so etwas ist mir noch zu weit weg.)
    Ich habe im Dokumenten-Kopf so etwas
    Code:
    \usepackage{datetime2}
    \DTMsetup{
    	datesep={},
    	timesep={}
    }
    stehen, um im Dokumenten-Körper testweise
    Code:
    \DTMnow00
    auszugeben.
    XeTeX gibt keine Sekunden aus! Diese auf "00" zu setzen stört mich nicht, frage mich nur, ob man das eleganter hinbekommt...

    Was ich auch noch nicht herausbekommen habe: Wie erzeuge ich Ausgaben wie 20150903130100 ohne \today zu ändern?
    Eigentlich will ich ja nur für eine Variable die Darstellung YYYYMMDDHHmmss erhalten.

    Im Zieldokument soll für \today weiterhin erscheinen: 3. September 2015
    Geändert von casualcoder (03-09-2015 um 12:13 Uhr) Grund: Link

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Die datetime-Befehle sind nicht expandierbar und deine \hbox ist auch ziemlich seltsam. Du solltest dir eigene Befehle bauen. Z.B:

    Code:
    \documentclass[fontsize=11pt]{scrartcl}
    \usepackage{expl3}
    \ExplSyntaxOn
    
    \int_new:N\g_my_curhour_int
    \int_new:N\g_my_curmin_int
    
    
    \int_gset:Nn\g_my_curhour_int{\int_div_truncate:nn{\time}{60}}
    \int_gset:Nn\g_my_curmin_int{\int_mod:nn{\time}{60}}
    
    
    \cs_new:Npn\mycurrenttime
    {
     \int_use:N\g_my_curhour_int
     :
     \int_compare:nNnT{\g_my_curmin_int}<{10}{0}
     \int_use:N\g_my_curmin_int
     :00
    } 
    
    
    \cs_new:Npn\mydatestamp
     {
      \int_use:N\year
      \int_compare:nNnT{\month}<{10}{0}
      \int_use:N\month
      \int_compare:nNnT{\day}<{10}{0}
      \int_use:N\day
     }  
    \ExplSyntaxOff
    
    \usepackage{hyperref}
    \hypersetup{
       pdfinfo={
          CreationDate={D:20150901200000},     %
          ModDate={D:\mydatestamp--\mycurrenttime}  
       },
       pdftitle={Minibeispiel}
    }
    \begin{document}
    \mydatestamp--\mycurrenttime
    \end{document}
    Geändert von u_fischer (03-09-2015 um 14:05 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •