PDF an bestimmter Stelle mit variablen Ankern öffnen

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


chrisdi91
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Do 30. Jul 2015, 10:37

PDF an bestimmter Stelle mit variablen Ankern öffnen

Beitrag von chrisdi91 »

Hallo zusammen!

ich wollte fragen, ob es möglich ist, wie mit
>>system('"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /A page=5 "file.pdf" ');
in Matlab, auch ein PDF zu öffnen, jedoch nicht auf einer bestimmten Seite sondern bei einem bestimmten Kapitel.

Sprich ob ich den "nameddest" Parameter benutzen kann um zu einem bestimmten Label zu springen.

Ich habe im Adobe-Forum gefragt (https://forums.adobe.com/message/8273283),
doch meinten die ich solle eher in nem Latex Forum fragen,
auch als ich bei Mathworks wegen Matlab anfragte, konnten die mir nicht wirklich weiterhelfen.

Mich würde zu allererst interessieren ob und wie ich die "Anchors" also die internen Hyperlinkziele finden kann.
Und ob da ein Zusammenhang (vom Namen) mit den Labels besteht.

Danke schon mal
Gruß
Christian
Zuletzt geändert von chrisdi91 am Mi 16. Dez 2015, 09:58, insgesamt 1-mal geändert.

Besserwisser

Beitrag von Besserwisser »

Die Namen der Anker, die hyperref setzt, findest du beispielsweise in den aux-Dateien des LaTeX-Laufs. Steht dort beispielsweise
\newlabel{sec:test}{{1}{5}{Testabschnitt}{section.1}{}}
dann ist sec:test der Name des Labels, 1 die Nummer, die von \ref ausgegeben wird, 5 die Nummer, die von \pageref ausgegeben wird, Testabschnitt der Text, der von \nameref ausgegeben wird und section.1 der Name des Ankers. Wofür das leere Argument steht, ist mir entfallen.

Ebenso wird für jede Überschrift bereits ein Anker gesetzt. Das ist das letzte Argument bei den \@writefile-Anweisungen.

In der Voreinstellung setzt hyperref übrigens auch Seitenanker. Diese haben den Präfix page. gefolgt von der formatierten Seitenzahl.

Statt sich auf die Innereien zu verlassen, kann man aber auch mit \hypertarget explizit einen Anker setzen und dabei den Namen des Ankers vorgeben.

chrisdi91
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Do 30. Jul 2015, 10:37

Beitrag von chrisdi91 »

Ich muss vermutlich dann drauf achten, dass dieser Anker vom namen her noch nicht andersweitig vergeben wurde.

Wenn ich an einer Stelle dann den Anker \hypertarget{Openingposition} setze,
kann ich das dann einfach mit
>> system('"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /A nameddest=Openingposition "file.pdf" ');

an dieser Stelle öffnen, oder wie müsste ich das dann angeben?


Vielen Vielen Dank schon mal für die Hilfe soweit!

Besserwisser

Beitrag von Besserwisser »

Zu Parametern des AcroReaders kann ich nichts sagen. Der ist mir einfach zu schlecht und Linux wird auch schon lange nicht mehr unterstützt. Bei Firefox kann man einfach wie üblichen den Link auf die PDF-Datei um einen #-Teil erweitern: http://mirror.ctan.org/macros/latex/con ... ption.BCOR

Bei okular geht es genauso – auch für lokale Dateien.

Bei evince gibt man den Namen des Ziels via Option -n an.

chrisdi91
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Do 30. Jul 2015, 10:37

Beitrag von chrisdi91 »

Habe nun bisschen rum getestet.

Setze ich einen Anker mit \hypertarget{Openingposition}

kann ich das tatsächlich mit folgenden Matlabcode an der Stelle öffnen.
% Matlab Befehl
system('"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /A nameddest=Openingposition "..\File.pdf" &');
% Ende des Befehls



Das PDF stellt eine Dokumentation einer Bibliothek mehrere Simulinkelemente dar.

Nun sind diese Elemente mit eigenem Code auch in der Dokumentation geschrieben. Hierzu ein MinimalBeispiel:
% Minimalbeispiel
\documentclass[12pt,a4paper,pdftex]{article}
\newcommand{\modelname}{dummy}


%Position 1

  \newenvironment{Element}[2]{%
   \renewcommand{\modelname}{#1}
   %Position 2
   \subsection{#2}
   \setcounter{equation}{0}
   }{\newpage}

%Position 3
\usepackage{cleveref}
\begin{document}

\begin{Element}{ABC12}{Elementname 1}

  %**************************************************
 \subsubsection{Description}\label{sec:\modelname:Description}
    This is a submodel ...

\end{Element}


\begin{Element}{XYZ34}{Elementname 2}

  %**************************************************
 \subsubsection{Description}\label{sec:\modelname:Description}
    This is a submodel ...

\end{Element}
\end{document}
% Ende des Minimalbeispiels



Mein Problem ist nun, dass mein eigentliches Dokument aufgeteilt ist.
So ist alles zwischen Position 1 und Position 3 in einer extra TeX-Datei ausgelagert als Stylefile. Dort ist im richtigen Dokument natürlich noch deutlich mehr und nicht nur diese wenigen Zeilen.

Wenn ich nun ein hypertarget setze und zwar an den Stellen, wo ich die diese Elemente benutze, springe ich immer nur zur Subsubsection "Description"
Da ich jedoch zu den Überschriften der Elemente springen möchte,
müsste ich die Anker bereits in deren Definition setzen.
Würde mir auch gelegen kommen, da ich (hoffentlich) dort nur einmal etwas wie \hypertarget{anc_\modelname} setzen müsste und dann an die jeweiligen Elementüberschriften mit ihrem Modelnamen springen kann.

Setzte ich nun obigen Anker an Position 2 bekomme ich aber folgende Fehlermeldung:
Undefined control sequence \begin{Element}{ABC12}{Elementname 1}

Ich dachte halt ich könnte den Anker bereits dort hinlegen, und mit dem \modelname variabel gestalten um es dann mit
% Matlab Befehl
system('"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /A nameddest=anc_ABC12 "..\File.pdf" &');
% Ende des Befehls


bzw.
% Matlab Befehl
system('"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /A nameddest=anc_XYZ34 "..\File.pdf" &');
% Ende des Befehls


an den jeweiligen Stellen öffnen zu können.
Zum öffnen komme ich aber ja leider nicht, da ich noch mit der bzw den Fehlermeldung kämpfe und nicht versteh, was ich ändern müsste bzw wohin ich es setzen muss.

[Edit: \usepackage{cleveref} war erst an Position 1, jedoch funktioniert das eigentliche texen des Dokuments nicht. und muss daher leider zwingend an Position 3 liegen.
Meine Frage dahin gehend. Ginge das dann überhaupt noch, mit dem hypertarget in der Definition, ich denke ja nicht, da man das Package zur Referenzierung ja erst später läd (bzw nur später laden kann)]

chrisdi91
Forum-Newbie
Forum-Newbie
Beiträge: 7
Registriert: Do 30. Jul 2015, 10:37

Beitrag von chrisdi91 »

Habs nun doch selber hinbekommen.

Mein Problem war, dass ich früher Fehlerhafte Referenzierungen mit hyperref bei Gleichungen hatte und daher cleveref benutzte.

Mir war nicht bewusst, dass ich für hypertarget hyperref brauche, da die normalen hyperreferenzierung mit hyperlink auch nur mit cleveref funktionierten.

Wenn ich also hyperref vor der definition lade und das Target so wie unten setze, kann ich es mit bereits geschrieben nem Befehl öffnen.
\documentclass[12pt,a4paper,pdftex]{article}

\newcommand{\modelname}{dummy}

\usepackage{hyperref}
  \newenvironment{Element}[2]{%
   \renewcommand{\modelname}{#1}
\hypertarget{anc-\modelname}{}
  \subsection{#2}
\setcounter{equation}{0}
   }{\newpage}

\usepackage{cleveref}

\begin{document}

\begin{Element}{ABC12}{Elementname 1}

  %**************************************************
 \section{Description}\label{sec:\modelname:Description}
    This is a submodel ...

\end{Element}


\begin{Element}{XYZ34}{Elementname 2}

  %**************************************************
 \section{Description2}\label{sec:\modelname:Description}
    This is a submodel ...

\end{Element}



\end{document}
 

Antworten