Jak odwołać się do figury w przecenie, używając pandoc?


101

Obecnie piszę dokument w przecenach i chciałbym nawiązać do obrazu z mojego tekstu.

this is my text, I want a reference to my image1 [here]. blablabla

![image1](img/image1.png)

Chcę zrobić to odniesienie, ponieważ po konwersji mojego markdown do formatu PDF obrazy są umieszczane na jednej lub dwóch stronach po, a dokument nie ma żadnego sensu.

AKTUALIZACJA:

Wypróbowałem odpowiedź Ryana w tym poście i nie mogę sprawić, by działała. Najwyraźniej kod:

[image]: image.png "Image Title" 
![Alt text][image] 
A reference to the [image](#image).

powinien produkować:

\begin{figure}[htbp] 
\centering 
\includegraphics[keepaspectratio,width=\textwidth,height=0.75\textheight]{i mage.png} 
\caption{Alt text} 
\label{image} 
\end{figure} 

A reference to the image (\autoref{image}).

zamiast tego otrzymuję:

\begin{figure}[htbp]
\centering
\includegraphics{image.png}
\caption{Alt text}
\end{figure}

A reference to the \href{\#image}{image}.

Zauważyłem dwa problemy:

  • \label{image} nie pojawia się: żadne odniesienie nie jest tworzone.
  • (\autoref{image})staje się \href{\#image}{image}: nie wykryto żadnego odniesienia.

A potem, kiedy konwertuję to na pdf, oczywiście nie prowadzi to do obrazu. Jest łącze, ale nie prowadzi do niczego.

Każda pomoc byłaby bardzo mile widziana!


1
Czy wypróbowałeś metodę wymienioną na groups.google.com/group/pandoc-discuss/msg/4a42442657a96414 ?
NN

Przetestowałem to i nie generuje autoref. dziwne ...
Romain Piel,

Może powinieneś zmodyfikować swoje pytanie, aby uwzględnić to, co próbowałeś, co otrzymałeś i czego chcesz (aby łatwiej było Ci pomóc).
NN

Odpowiedzi:


95

W pandoc możesz nawet zrobić:

![This is the caption\label{mylabel}](/url/of/image.png)
See figure \ref{mylabel}.

41
Pomaga to tylko wtedy, gdy konwertujesz do TeX, ale nie wtedy, gdy chcesz również utworzyć HTML z tego samego źródła Markdown.
Jakob

12
Dostępnych jest kilka filtrów, dzięki którym odniesienie do figury działa ze wszystkimi formatami wyjściowymi pandoc-fignos i pandoc-crossref
joelostblom

Niestety nie jest to zbyt elastyczny sposób na zrobienie tego. W ten sposób nie można określić szerokości ani wysokości obrazu. Czy można w ten sposób dołączyć pliki PDF? Jeśli nie, byłoby to również wadą, ponieważ jest preferowane w pliku PDF jako przypadku wyjściowym.
Zelphir Kaltstahl

2
Możliwe jest ustawienie szerokości i wysokości za pomocą:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole

24

Możesz użyć filtra pandoc-fignos do numerowania figur i tworzenia odniesień. Działa z każdym formatem wyjściowym - nie tylko LaTeX.

Dodaj etykietę do atrybutów obrazu w następujący sposób:

 ![Caption.](image.png) {#fig:description}

... a następnie odnieś się do rysunku w ten sposób:

 @fig:description

Informacje o tym, jak zainstalować i zastosować filtr pandoc-fignos, znajdują się na jego stronie internetowej. Istnieje również filtr pandoc-eqnos do robienia tego samego z równaniami.



18

Rozmawiałem z Ryanem Grayem po przeczytaniu jego odpowiedzi w podobnym poście. Właściwie jego rozwiązanie polegające na użyciu:

[image]: image.png "Image Title" 
![Alt text][image] 
A reference to the [image](#image).

jest dostosowywany tylko podczas korzystania z multimarkdown.

Jeśli chodzi o pandoc, jedynym rozwiązaniem umożliwiającym tworzenie odsyłaczy jest użycie bezpośrednio lateksowych słów kluczowych:

[image]: image.png "Image Title"
![Alt text \label{mylabel}][image]
See figure \ref{mylabel}.

5
Ale, jak powiedział Jakob, odpowiadając na zaakceptowaną odpowiedź: „To pomaga tylko wtedy, gdy konwertujesz do TeX-a, ale nie wtedy, gdy chcesz również tworzyć HTML z tego samego źródła Markdown”.
DanielTuzes

Czy w przypadku multimarkdown istnieje sposób odniesienia się do figury za pomocą automatycznie obliczonego numeru figury? Wyobraziłbym sobie coś takiego jak [] (# obraz), a następnie multimarkdown zamieniłby pusty tekst na liczbę (tak jak w przypadku przypisów).
Alec Jacobson

4

Pandoc obsługuje odwołania do sekcji (poprzez identyfikatory sekcji poprzedzone prefiksem #).

Komentarze do tego otwartego problemu opisują, w jaki sposób poniższe obejście wykorzystuje identyfikatory sekcji do generowania odwołań do obrazów w języku LaTeX i HTML:

<div id="fig:lalune">
![A voyage to the moon\label{fig:lalune}](lalune.jpg)

</div>

[The voyage to the moon](#fig:lalune).

</div>Wymagana jest pusta linia przed .


4
Właściwe rozwiązanie, tj. Rozszerzenie składni markdown pandoc, aby umożliwić identyfikatory dla obrazów, jest teraz w końcu w toku. bądźcie czujni :)
Susanne Oberhauser

2

Zakładając, że chcesz, aby plik PDF z Pandoc był na końcu:

Najlepszym rozwiązaniem do wstawiania obrazów i zmiany ich atrybutów, które znalazłem, jest:

\begin{figure}[H]
\includegraphics[width=0.25\textwidth, height=!]{images/path.png}
\centering
\caption{mycaption}
\end{figure}

aw moim template.latexmam:

\usepackage{wrapfig}
\usepackage{float}

Inne rozwiązania nie mogą określać szerokości ani wysokości obrazu, a przynajmniej nie w standardowej przecenie. Jednak często w przypadku czegoś takiego jak książka lub papier istotne jest określenie wymiarów rysunków, z wyjątkiem tego, że chcesz skonfigurować rozmiar wyjściowy obrazów przed użyciem ich w dokumencie. W takim przypadku musiałbyś poradzić sobie z różnymi ustawieniami tych narzędzi, których używasz do tworzenia obrazów.

Polecam w przypadku Matplotlib wyeksportować do formatu PDF, a następnie użyć kodu, który wysłałem. Zapewni to najlepszą jakość obrazu i najwyższą elastyczność w konfigurowaniu wyglądu obrazu w wyjściowym pliku PDF, bez martwienia się o rzeczy.


Czy cała ta lateksowa składnia trafia prosto do twojego pliku przeceny?
spinup

@spinup Yes. Pandoc może obsłużyć osadzone elementy Latex w Twoim pliku przecen. Kolejna rada: Eksportuj jako plik PDF podczas eksportowania z Matplotlib. W ten sposób Pandoc / silnik lateksowy nie pogorszy jakości obrazu, a będziesz mieć skalowalny obraz, zamiast czegoś pikselowanego podczas powiększania i zmniejszania pliku PDF.
Zelphir Kaltstahl

1

Dzięki pandoc-crossref możesz krzyżować dane liczbowe za pomocą następującej składni:

![Caption](file.ext){#fig:label}

Następnie odwołaj się do rysunku w tekście podobnie do składni cytatu [@fig:label]i skompiluj z --filter pandoc-crossref(musi być poprzedzony, --filter pandoc-citeprocjeśli używasz również tego).

Można kontrolować stylizacji z np \usepackage[font=small,labelfont=bf]{caption}w header-includes.


Sprytną sztuczką, jeśli używasz \listoffiguresw lateksie, jest ten filtr lua , który pozwala ustawić krótki tytuł, zamiast wyświetlać całą legendę postaci na liście figurek:

![Caption](file.ext){#fig:label short-caption='my short caption'}

następnie skompiluj z --lua-filter short-captions.lua.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.