Org- মোড বাফারের শীর্ষ-স্তরের শিরোনামগুলি কীভাবে পৃথক ফাইলগুলিতে রফতানি করতে হবে?


17

org-modeবাফারের প্রতিটি শীর্ষ-স্তরের শিরোনাম কীভাবে সম্পর্কিত CUSTOM_ID+ (স্যানিটাইজড) শিরোনামের মান অনুসারে আলাদা একটি ফাইলে রফতানি করা যায় ?

ধরা যাক একটি বাফারে রয়েছে:

* Title of Heading 1
  :PROPERTIES:
  :CUSTOM_ID: fibrillogenesis
  :END:
  Suspendisse potenti. Mauris ac felis vel velit tristique imperdiet.  

** Sub-Heading
   Nullam rutrum.

* Another Title for Heading 2
  :PROPERTIES:
  :CUSTOM_ID: mitochondrion
  :END:
  Mauris mollis tincidunt felis.  Sed bibendum.

চূড়ান্ত ফলাফলটি নিম্নোক্ত ফাইলের নাম এবং সামগ্রী সহ রফতানির সময় (এইচটিএমএল, ল্যাটেক্স, ইত্যাদি) বেছে নেওয়া ফর্ম্যাট সহ দুটি ফাইল-শীর্ষ স্তরের প্রত্যেকটির জন্য একটি করে দুটি ফাইল যুক্ত ডিরেক্টরি থাকবে:

  1. প্রথম রফতানি শিরোনামের ফাইলের নাম: fibrillogenesis-title-of-heading-1.[ext]

    মূল প্রথম শীর্ষ-স্তরের শিরোনামের সাথে সম্পর্কিত, রফতানি করা সামগ্রী:

    * Title of Heading 1
      :PROPERTIES:
      :CUSTOM_ID: fibrillogenesis
      :END:
      Suspendisse potenti. Mauris ac felis vel velit tristique imperdiet.  
    
    ** Sub-Heading 
       Nullam rutrum.
    
  2. দ্বিতীয় রফতানি শিরোনামের ফাইলের নাম: mitochondrion-another-title-for-heading-2.[ext]

    মূল দ্বিতীয় শীর্ষ-স্তরের শিরোনামের সাথে সম্পর্কিত, রফতানি করা সামগ্রী:

    * Another Title for Heading 2
    :PROPERTIES:
    :CUSTOM_ID: mitochondrion
    :END:
    Mauris mollis tincidunt felis.  Sed bibendum. 
    

আমি কোনও ইঙ্গিত, দিকনির্দেশ, সিউডোকোড বা (আরও ভাল) বাস্তব কোডের জন্য খুব কৃতজ্ঞ হব।

উত্তর:


27

নিম্নলিখিত কমান্ডটি আপনাকে একটি ব্যাক-এন্ড চয়ন করতে দেয় এবং তারপরে প্রতিটি শীর্ষ স্তরের সাবট্রিকে একটি পৃথক ফাইলে রফতানি করে:

(defun org-export-all (backend)
  "Export all subtrees that are *not* tagged with :noexport: to
separate files.

Note that subtrees must have the :EXPORT_FILE_NAME: property set
to a unique value for this to work properly."
  (interactive "sEnter backend: ")
  (let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
                  ((equal backend "latex") 'org-latex-export-to-latex)
                  ((equal backend "pdf") 'org-latex-export-to-pdf))))
    (save-excursion
      (set-mark (point-min))
      (goto-char (point-max))
      (org-map-entries (lambda () (funcall fn nil t)) "-noexport" 'region-start-level))))

এটি বর্তমানে এইচটিএমএল ( html), লটেক্স ( latex) এবং পিডিএফ ( pdf) এক্সপোর্ট সমর্থন করে। আপনি আরও ক্লজ যুক্ত করে আরও ব্যাক-এন্ডের জন্য সমর্থন যুক্ত করতে পারেন cond

যেহেতু ডক্টরিং বলেছেন, প্রতিটি সাবট্রির জন্য আপনার :EXPORT_FILE_NAME:যে ফাইলটি রফতানি করতে চান তার জন্য সম্পত্তি সেট করতে হবে। (অন্যান্য বিকল্পের জন্য নীচে দেখুন।)

শিরোনাম পাঠ্য থেকে রফতানি ফাইলের নাম স্বয়ংক্রিয়ভাবে উত্পন্ন হচ্ছে

আপনি যদি :EXPORT_FILE_NAME:প্রতিটি শীর্ষ-স্তরের শিরোনামে বৈশিষ্ট্য যুক্ত করতে না চান তবে আপনি org-export-allস্বয়ংক্রিয়ভাবে ফাইলের নাম উত্পাদন করতে সংশোধন করতে পারেন যেমন শিরোনাম পাঠ্য, :EXPORT_FILE_NAME:রফতানির সময় অস্থায়ীভাবে সেট করে:

(defun org-export-all (backend)
  "Export all subtrees that are *not* tagged with :noexport: to
separate files.

Subtrees that do not have the :EXPORT_FILE_NAME: property set
are exported to a filename derived from the headline text."
  (interactive "sEnter backend: ")
  (let ((fn (cond ((equal backend "html") 'org-html-export-to-html)
                  ((equal backend "latex") 'org-latex-export-to-latex)
                  ((equal backend "pdf") 'org-latex-export-to-pdf)))
        (modifiedp (buffer-modified-p)))
    (save-excursion
      (set-mark (point-min))
      (goto-char (point-max))
      (org-map-entries
       (lambda ()
         (let ((export-file (org-entry-get (point) "EXPORT_FILE_NAME")))
           (unless export-file
             (org-set-property
              "EXPORT_FILE_NAME"
              (replace-regexp-in-string " " "_" (nth 4 (org-heading-components)))))
           (funcall fn nil t)
           (unless export-file (org-delete-property "EXPORT_FILE_NAME"))
           (set-buffer-modified-p modifiedp)))
       "-noexport" 'region-start-level))))

এই ফাংশনটি শিরোনাম পাঠ্যে "_" দিয়ে স্পেস প্রতিস্থাপন করে রফতানীর ফাইলের নাম তৈরি করে। আপনি যদি ফাইলের replace-regexp-in-stringনামটি অন্য কোনও উপায়ে উত্পন্ন করতে চান তবে সেক্সপকে নিজের পছন্দমতো পরিবর্তন করুন ।

:EXPORT_FILE_NAME:সেট করার সময় উত্পন্ন হচ্ছে:CUSTOM_ID:

নিম্নলিখিত পরামর্শ সহ, আপনি সেট করার সময় org-set-propertyস্বয়ংক্রিয়ভাবে একটি উপযুক্ত মান :EXPORT_FILE_NAME:সেট করবে :CUSTOM_ID::

(defadvice org-set-property (after set-export-file-name
                                   (property value) activate compile)
  (when (equal org-last-set-property "CUSTOM_ID")
    (let ((export-file-name
           (concat (org-entry-get nil "CUSTOM_ID")
                   "-"
                   (replace-regexp-in-string " " "-" (downcase (org-get-heading t t))))))
      (org-entry-put nil "EXPORT_FILE_NAME" export-file-name))))

নোট করুন :EXPORT_FILE_NAME:যে এটির সাথে কোনও ফাইল এক্সটেনশান যুক্ত হবে না তবে এটি বিবেচ্য নয় কারণ নির্দিষ্ট ব্যাক-এন্ডে রফতানি করার org-mode সময় ফলাফল প্রাপ্ত ফাইলগুলির জন্য স্বয়ংক্রিয়ভাবে সঠিক এক্সটেনশনটি বেছে নেবে


অতিরিক্ত তথ্য

বিদ্যমান সাবট্রিজগুলি বাল্কে আপডেট করা

আপনার কাছে :EXPORT_FILE_NAME:সম্পত্তি সংস্থান করতে হবে এমন প্রচুর বিদ্যমান সাবট্রিজগুলি যদি থাকে তবে আপনি একটি কীবোর্ড ম্যাক্রো ব্যবহার করতে পারেন । প্রথম সাবট্রির উপর অবস্থান পয়েন্ট, তারপরে নিম্নলিখিতটি করুন:

  • F3

    ... রেকর্ডিং শুরু করতে

  • C-c C-x p CUSTOM_ID RET RET

    ... :EXPORT_FILE_NAME:ভিত্তিক ইম্যাকস সেট করতে :CUSTOM_ID:

  • C-c C-f

    ... পরবর্তী শীর্ষ স্তরের শিরোনামে যেতে।

  • F4

    ... রেকর্ডিং বন্ধ

পরবর্তী সাবট্রির জন্য ম্যাক্রোর পুনরাবৃত্তি করতে টিপুন F4সমস্ত অবশিষ্ট সাবট্রির জন্য ম্যাক্রোর পুনরাবৃত্তি করতে টিপুন M-0 F4(এটি একটি শূন্য)।

ভবিষ্যতের সেশনের জন্য ম্যাক্রোগুলি সংরক্ষণ করা হচ্ছে

ডিফল্টরূপে, কীবোর্ড ম্যাক্রোগুলি সেশনে জুড়ে সংরক্ষণ করা হয় না। পরে আপনার ব্যবহারের জন্য আপনার init-ফাইলটিতে ম্যাক্রো সঞ্চয় করতে, এটি করুন:

  1. ম্যাক্রোর নাম দিন:

    M-x name-last-kbd-macro RET org-set-export-file-name RET

  2. আপনার আর-ফাইলটি সন্ধান করুন এবং এমন কোনও জায়গায় যান যেখানে আপনি ম্যাক্রো roোকাতে চান।

  3. ম্যাক্রো Inোকান:

    M-x insert-kbd-macro RET org-set-export-file-name RET

    ইমাসগুলি নিম্নলিখিত কোডটি বিন্দুতে প্রবেশ করবে:

    (fset 'org-set-export-file-name
       "\C-c\C-xpCUSTOM_ID\C-m\C-m\C-c\C-f")

    যদি আপনি যথেষ্ট পরিমাণে স্ক্রিন্ট করে থাকেন তবে আপনি দেখতে পাচ্ছেন যে দ্বিতীয় তর্কটিতে fsetকীগুলির ক্রম রয়েছে যা আপনি ম্যাক্রো রেকর্ড করার সময় চাপিয়েছিলেন :)

  4. (Alচ্ছিক) সেরা ফলাফলের জন্য, আপনি org-set-export-file-nameকোনও কীতে বাঁধতে চাইতে পারেন :

    (define-key org-mode-map (kbd "<f6>") 'org-set-export-file-name)
  5. সংরক্ষণ.


1
খুশী হলাম। আপনি কীভাবে প্রতিটি শিরোনামের জন্য প্রোগ্রাম্যাটিকভাবে :EXPORT_FILE_NAME:সম্পত্তি সেট করবেন সে সম্পর্কে আপনি আমাকে একটি ইঙ্গিত দিতে পারেন :CUSTOM_ID:+heading-title-lowercased?
gsl

1
@gsl আপনি সেট করার সময় আপনি org-set-propertyস্বয়ংক্রিয়ভাবে :EXPORT_FILE_NAME:সম্পত্তি উত্পন্ন করার পরামর্শ দিতে পারেন :CUSTOM_ID:
itjeyd

1
পরামর্শের জন্য আপনাকে ধন্যবাদ! আমি এর সাথে সাবলীল নই elisp, তবে চেষ্টা করব shall আমি কীভাবে প্রতিটি শিরোনামের শিরোনাম ক্যাপচার করব, ড্যাশের সাথে সাদা স্থানের পরিবর্তে, ছোট হাতের অক্ষরে রাখি, সেই স্যানিটাইজড স্ট্রিংটিতে যোগ করতে পারি :CUSTOM_ID:এবং শেষ পর্যন্ত একটি অর্গ বৈশিষ্ট্য নির্ধারণ করি।
জিএসএল

1
@gsl আমি defadviceআমার উত্তরে একটি যুক্ত করেছি যা :EXPORT_FILE_NAME:আপনি <custom-id>-<heading>যখন সেট করেন তখন স্বয়ংক্রিয়ভাবে সেট হয়ে যায় :CUSTOM_ID:
ইজজেড

1
আপনাকে অনেক ধন্যবাদ, আমি আপনার কোড দিয়ে অনেক কিছু শিখেছি। যদি কেউ এর মধ্যে ইতিমধ্যে একটি সেটের org-modeফাইল থাকে CUSTOM_IDতবে কীভাবে "EXPORT_FILE_NAME" সেট করতে কোড চালানো যায়? নতুন সন্নিবেশ করা হবে না। আমি অনুমান করছি defadviceকি কাজ হবে না? সমস্ত শীর্ষ-স্তরের শিরোনামকে অতিক্রম করতে এবং সেগুলিতে কোড প্রয়োগ করার জন্য কী কোনও লুপিং সুবিধা রয়েছে?
gsl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.