ฉันจะอ้างอิงถึงรูปใน markdown โดยใช้ pandoc ได้อย่างไร


103

ฉันกำลังเขียนเอกสารใน markdown และฉันต้องการอ้างอิงถึงรูปภาพจากข้อความของฉัน

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

![image1](img/image1.png)

ฉันต้องการทำการอ้างอิงนั้นเพราะหลังจากแปลง markdown เป็น pdf แล้วรูปภาพจะถูกวางไว้ในหนึ่งหรือสองหน้าหลังจากนั้นและเอกสารก็ไม่สมเหตุสมผล

อัพเดท:

ฉันได้ลองคำตอบของ Ryanในโพสต์นั้นแล้วและไม่สามารถใช้งานได้ เห็นได้ชัดว่ารหัส:

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

ควรผลิต:

\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}).

แทนฉันได้รับ:

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

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

ฉันสังเกตเห็นปัญหาสองประการ:

  • \label{image} ไม่ปรากฏ: ไม่มีการสร้างการอ้างอิง
  • (\autoref{image})กลายเป็น\href{\#image}{image}: ไม่พบการอ้างอิงโยง

จากนั้นเมื่อฉันแปลงเป็น pdf เห็นได้ชัดว่ามันไม่เชื่อมโยงกับรูปภาพ มีลิงค์ แต่ไม่ได้เชื่อมโยงกับอะไรเลย

ความช่วยเหลือใด ๆ จะได้รับการชื่นชมมาก !!


1
คุณได้ลองใช้วิธีที่กล่าวถึงในgroups.google.com/group/pandoc-discuss/msg/4a42442657a96414หรือยัง
NN

ฉันได้ทดสอบแล้ว แต่มันไม่ได้สร้างออโต้เรฟ แปลก ...
Romain Piel

บางทีคุณควรแก้ไขคำถามเพื่อรวมสิ่งที่คุณลองสิ่งที่คุณได้รับและสิ่งที่คุณต้องการ (เพื่อที่จะช่วยคุณได้ง่ายขึ้น)
NN

คำตอบ:


98

ใน pandoc คุณสามารถทำได้:

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

41
สิ่งนี้จะช่วยได้เฉพาะในกรณีที่คุณแปลงเป็น TeX แต่ไม่ใช่หากคุณต้องการสร้าง HTML จากแหล่ง Markdown เดียวกัน
Jakob

12
มีฟิลเตอร์สองสามตัวเพื่อให้การอ้างอิงรูปทำงานกับรูปแบบเอาต์พุตทั้งหมดpandoc-fignosและpandoc-crossref
joelostblom

น่าเสียดายที่นี่ไม่ใช่วิธีที่ยืดหยุ่นมากนัก ไม่สามารถระบุความกว้างหรือความสูงของภาพด้วยวิธีนี้ เป็นไปได้ไหมที่จะรวม PDF ด้วยวิธีนั้น หากไม่เป็นเช่นนั้นก็จะเป็นข้อเสียเช่นกันเนื่องจากควรอยู่ใน PDF เป็นกรณีเอาต์พุต
Zelphir Kaltstahl

2
สามารถกำหนดความกว้างและความสูงได้โดยใช้:![This is the caption\label{mylabel}](/url/of/image.png){width=30px height=20px}
Sam Walpole

24

คุณสามารถใช้pandoc-fignosตัวกรองสำหรับการกำหนดหมายเลขและการอ้างอิง ใช้งานได้กับรูปแบบเอาต์พุตใด ๆ - ไม่ใช่แค่ LaTeX

เพิ่มป้ายกำกับให้กับแอตทริบิวต์ของรูปภาพดังนี้:

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

... จากนั้นอ้างอิงรูปดังนี้:

 @fig:description

ข้อมูลเกี่ยวกับวิธีการติดตั้งและใช้ฟิลเตอร์ pandoc-fignos มีให้ในเว็บเพจ นอกจากนี้ยังมีไฟล์ฟิลเตอร์ pandoc-eqnosสำหรับทำสิ่งเดียวกันกับสมการ


ฉันต้องการทำสิ่งที่คล้ายกันโดยอ้างถึงองค์ประกอบของรายการสั่งซื้อ
DanielTuzes

19

ฉันเคยคุยกับ Ryan Gray หลังจากอ่านคำตอบของเขาในโพสต์ที่คล้ายกัน จริงๆแล้ววิธีการใช้:

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

จะดัดแปลงเมื่อใช้ multimarkdown เท่านั้น

เมื่อพูดถึง pandoc ทางออกเดียวที่จะทำให้การอ้างอิงโยงคือการใช้คำหลักที่เป็นน้ำยางโดยตรง

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

5
แต่อย่างที่จาคอบพูดในคำตอบที่ยอมรับ "วิธีนี้จะช่วยได้ก็ต่อเมื่อคุณแปลงเป็น TeX แต่ไม่ใช่ถ้าคุณต้องการสร้าง HTML จากแหล่งที่มา Markdown เดียวกัน"
DanielTuzes

สำหรับ multimarkdown มีวิธีอ้างอิงตัวเลขผ่านหมายเลขรูปที่คำนวณโดยอัตโนมัติหรือไม่? ฉันนึกภาพออกว่า [] (# ภาพ) จากนั้น multimarkdown จะแทนที่ข้อความว่างด้วยตัวเลข (เช่นเดียวกับเชิงอรรถ)
Alec Jacobson

4

Pandoc รองรับส่วนการอ้างอิง (ผ่านตัวระบุส่วนที่นำหน้าโดย# )

ความคิดเห็นเกี่ยวกับปัญหาที่เปิดอยู่นี้อธิบายถึงวิธีการแก้ปัญหาต่อไปนี้ใช้ประโยชน์จากตัวระบุส่วนสำหรับการสร้างการอ้างอิงรูปภาพใน LaTeX และ HTML:

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

</div>

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

</div>ต้องระบุบรรทัดว่างก่อน


4
วิธีแก้ปัญหาที่เหมาะสมเช่นส่วนขยายของไวยากรณ์ pandoc markdown เพื่ออนุญาตตัวระบุสำหรับรูปภาพในที่สุดก็อยู่ระหว่างดำเนินการ คอยติดตาม :)
Susanne Oberhauser

2

สมมติว่าคุณต้องการเอาต์พุต PDF ของ Pandoc ในตอนท้าย:

ทางออกที่ดีที่สุดสำหรับการแทรกรูปภาพและเปลี่ยนคุณสมบัติที่ฉันพบคือ:

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

และในของtemplate.latexฉันฉันมี:

\usepackage{wrapfig}
\usepackage{float}

โซลูชันอื่นไม่สามารถระบุความกว้างหรือความสูงของภาพได้อย่างน้อยก็ไม่ได้อยู่ในการทำเครื่องหมายมาตรฐาน อย่างไรก็ตามมักจำเป็นสำหรับบางสิ่งบางอย่างเช่นหนังสือหรือกระดาษในการระบุขนาดของตัวเลขยกเว้นคุณต้องการกำหนดขนาดเอาต์พุตของภาพก่อนที่จะใช้ในเอกสารของคุณ ในกรณีนี้คุณจะต้องจัดการกับการตั้งค่าต่างๆสำหรับเครื่องมือที่คุณใช้สร้างภาพ

ฉันแนะนำในกรณีของ Matplotlib ให้ส่งออกเป็น PDF จากนั้นใช้รหัสที่ฉันโพสต์ สิ่งนี้จะให้คุณภาพของภาพที่ดีที่สุดและมีความยืดหยุ่นสูงสุดในการกำหนดค่าลักษณะของภาพใน PDF ที่ส่งออกโดยไม่ต้องกังวลกับสิ่งต่างๆ


ไวยากรณ์ลาเท็กซ์ทั้งหมดนี้ตรงไปยังไฟล์ markdown ของคุณหรือไม่?
spinup

@spinup ใช่. Pandoc สามารถจัดการเนื้อหา Latex ที่ฝังไว้ในไฟล์ markdown ของคุณได้ คำแนะนำอื่น ๆ : ส่งออกเป็นไฟล์ PDF เมื่อส่งออกจาก Matplotlib วิธีนี้ Pandoc / เครื่องมือลาเท็กซ์จะไม่ลดคุณภาพของภาพและคุณจะมีภาพที่ปรับขนาดได้แทนที่จะเป็นภาพที่มีพิกเซลเมื่อคุณซูมเข้าและออกจากไฟล์ PDF
Zelphir Kaltstahl

1

ด้วยpandoc-crossrefคุณสามารถข้ามตัวเลขอ้างอิงด้วยไวยากรณ์ต่อไปนี้:

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

จากนั้นอ้างอิงรูปในข้อความที่คล้ายกับไวยากรณ์การอ้างอิง[@fig:label]และรวบรวมด้วย--filter pandoc-crossref(ต้องมาก่อน--filter pandoc-citeprocหากคุณใช้สิ่งนั้นด้วย)

คุณสามารถควบคุมการจัดแต่งทรงผมด้วยเช่นใน\usepackage[font=small,labelfont=bf]{caption}header-includes


เคล็ดลับที่เกี่ยวข้องอย่างเรียบร้อยหากคุณใช้\listoffiguresในลาเท็กซ์คือlua-filterซึ่งช่วยให้คุณตั้งชื่อสั้น ๆ แทนที่จะให้คำอธิบายภาพทั้งหมดปรากฏในรายการตัวเลขของคุณ:

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

แล้วคอมไพล์ด้วย--lua-filter short-captions.lua.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.