ইম্যাকস একটি স্বেচ্ছাসেবী ওআরজি প্রোপার্টিটিকে একটি স্বেচ্ছাসেবী স্ট্রিংয়ে (যথা একটি লটেক্স লেবেল) রূপান্তর করতে ফাংশন করে?


11

আমার কাছে org-ফাইল হিসাবে অনেকগুলি নথি রয়েছে যার মতো একটি CUSTOM_LABEL সম্পত্তি রয়েছে

* Introduction :PROPERTIES: :CUSTOM_LABEL: AP 1 :END:

এই ক্ষেত্রে, ফাইলগুলি ল্যাটেক্স হিসাবে রফতানি করা দরকার, প্রতিটিকে CUSTOM_LABELএকটি হিসাবে অনুবাদ করে \label{marker}। উপরের উদাহরণটিতে অনুবাদ করা উচিত \label{AP 1}

আমি রফতানির সময় কাস্টম ফাংশনগুলি কীভাবে কল করতে পারি তা আমি ইতিমধ্যে জানি, তবে আমি সেই বিশেষ রূপান্তরটি করার জন্য একটি ডিফন লিখতে যথেষ্ট বিশেষজ্ঞ নই, CUSTOM_LABEL- ->\label{}

কিভাবে defun একটি উদ্বুদ্ধ করতে পারেন custom_labelযেমন \label{}লেখা যেতে?

আমি এমনকি কিছু সিডো কোড, বা কিছু পয়েন্টার প্রশংসা করব।

আমি অন্য জায়গাগুলির পরিবর্তে এই প্রশ্নটি এখানে জিজ্ঞাসা করছি, কারণ এটি আরও বেশি ইমাস প্রশ্ন, যেহেতু আমি org-মোড ম্যানুয়ালটি ভালভাবে অনুসন্ধান করেছি এবং সেই ধরণের বৈশিষ্ট্যটি বর্তমানে অনুপলব্ধ।

রফতানির সময় প্রদত্ত সম্পত্তিকে রূপান্তর করার জন্য একটি জেনেরিক ফাংশন (ল্যাটেক্স, এইচটিএমএল বা অন্য কোনও ফর্ম্যাট) আরও ভাল হবে।

ধন্যবাদ.


শিরোনাম বন্ধ মনে হচ্ছে। যদি আমি প্রশ্নটি বুঝতে পারি তবে আপনি একটি org সম্পত্তিটিকে অন্য এক অর্গের সম্পত্তি হিসাবে নয় বরং একটি স্বেচ্ছাসেবী স্ট্রিংয়ে (যথা একটি ল্যাটেক্স লেবেল) রূপান্তর করতে চান।
মালবারবা

@ রেসামাস: আপনাকে এই পয়েন্টারের জন্য ধন্যবাদ। আমি প্রায় কয়েক ঘন্টা আগে সেই emacs-orgmodeতালিকায় পড়ছিলাম (অন্যদের মধ্যে, list.gnu.org/archive/html/emacs-orgmode/2014-09/msg00498.html )। আমি সেই কোডটি চেষ্টা করেছি, এবং ঠিক সেট করছি org-latex-custom-id-as-label। এটি HTML রফতানিতে দুর্দান্ত কাজ করে তবে লটেক্স রফতানির সাথে এর কোনও প্রভাব নেই। আমি আশা করি আমি কেবল org-modeমূল ফাংশনগুলির উপর নির্ভর করতে পারি, তবুও আমি @ মালাবব্র্বার জবাব পছন্দ করি, কারণ এটি একটি দুর্দান্ত সাধারণীকরণের সুযোগ দেয়।
gsl

@ আরসমাস এটি আমার প্রয়োজন আচরণ। তবে আমি আপনার কোডটি চালিয়েছি তবে \section{h}\label{sec-1}আমি পেয়েছি GNU Emacs 24.3.94.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) of 2014-10-04 on builder10-9.porkrind.orgএবং ব্যবহার করছি Org-mode version 8.2.6 (release_8.2.6-1 @ /Applications/Emacs.app/Contents/Resources/lisp/org/)। এছাড়াও, নিশ্চিত করার জন্য, আমি আমার .emacs.d নামকরণ করেছিলাম, সুতরাং এটি কোনও কাস্টম স্টাফ ছাড়াই চলে।
জিএসএল

আপনি কেবলমাত্র একটি লাইনের লাইনে একটি পুরো কাজের উদাহরণ সংশ্লেষিত করতে সক্ষম হয়েছেন তা খুব সুন্দর!
জিএসএল

আহ, এটা ব্যাখ্যা করবে! আমি org-modeএই el-getরেসিপিটি ব্যবহার করে সর্বশেষে ইনস্টল করার চেষ্টা করেছি : github.com/dimitri/el-get/blob/master/recips/org-mode.rcp , তবে আমি এখনও Org-mode version 8.2.6 (release_8.2.6-1 @ /Users/gsl/.emacs.d/el-get/org-mode/lisp/জানতে পারি কীভাবে সেই রেসিপিটি টুইঙ্ক করতে হয় যাতে আমি এটির জন্য এটি ব্যবহার করতে পারি দেব-শাখা? আমি এটি নতুন প্রশ্ন হিসাবে জিজ্ঞাসা করতে পারে। যে নির্দেশ করার জন্য আপনাকে অনেক ধন্যবাদ।
জিএসএল

উত্তর:


10

আমি একটি ফাংশন লিখেছি যা আপনি যা চান তা পুরোপুরি প্রসারণযোগ্য উপায়ে করেন। এটি কোন শিরোনামগুলিতে সম্পত্তি CUSTOM_LABEL (বা আপনার কনফিগার করা অন্য কোনও সম্পত্তি) রয়েছে তা যাচাই করে এবং endless/insert-org-label-latexযুক্তি হিসাবে সম্পত্তিটির মান সহ তাদের প্রতিটিটিতে ফাংশনটি কল করে ।

উদাহরণ স্নিপেট এছাড়াও দেখায় যে কীভাবে এটি এইচটিএমএল বা অন্যান্য ব্যাকএন্ডের জন্য প্রসারিত করা যায়।

প্রতিস্থাপনগুলি কনফিগার করুন

এই ভেরিয়েবলের সাহায্যে আপনি যে বৈশিষ্ট্যগুলি যত্ন নিয়েছেন এবং প্রতিটি সম্পত্তি হ্যান্ডেল করার জন্য কোন ফাংশন ডাকা হবে তা কনফিগার করতে পারেন।

(defcustom endless/org-property-mapping 
  '((latex ("CUSTOM_LABEL" . endless/insert-org-label-latex))
    (html ("CUSTOM_LABEL" . endless/insert-org-label-html)))
  "List of mappings from org property to arbitrary strings.
Each element is a list:
  (BACKEND (PROPERTY1 . FUNCTION1) (PROPERTY2 . FUNCTION2) ...)

FUNCTION are functions which get called with a single
argument (the value of PROPERTY) and are responsible for doing
whatever should be done."
  :type '(repeat (cons symbol (repeat (cons string string)))))

ভারী কর্মী

Org এক্সপোর্ট হুকটিতে আপনার যা যুক্ত করা উচিত তা এই ফাংশনটি। এটি উপরে তালিকাভুক্ত বৈশিষ্ট্যগুলি যাচাই করা এবং সেই বৈশিষ্ট্যগুলির সাথে সম্পর্কিত ফাংশনগুলিকে কল করার ক্ষেত্রে যত্ন নেয়।

(defun endless/replace-org-property (backend)
  "Convert org properties using `endless/org-property-mapping'.
Lookup BACKEND in `endless/org-property-mapping' for a list of
\(PROPERTY REPLACEMENT). For each healine being exported, if it has a
PROPERTY listed insert a string immediately after the healine given by
    (format REPLACEMENT PROPERTY-VALUE)"
  (let ((map (cdr (assoc backend endless/org-property-mapping)))
        value replacement)
    (when map      
      (org-map-entries
       (lambda () 
         (dolist (it map)
           (save-excursion
             (when (setq value (org-entry-get (point) (car it))) 
               (funcall (cdr it) value)))))))))

(add-hook 'org-export-before-processing-hook #'endless/replace-org-property)

আপনি সংজ্ঞায়িত ফাংশন

এগুলিই প্রকৃত প্রতিস্থাপন করে। নীচে ল্যাটেক্স মামলার উদাহরণ রয়েছে।

(defun endless/insert-org-label-latex (label)
  "Insert \"\\\\label{LABEL}\\n\" after the :PROPERTY: drawer."
  (search-forward-regexp org-property-end-re)
  (forward-char 1)
  (insert (format "\\label{%s}\n" label)))

ফলাফল

উপরের এই কোডটির সমস্ত মূল্যায়ন করুন, তারপরে নিম্নোক্ত org বাফারটিকে ক্ষীরে রফতানি করুন।

* Test
  :PROPERTIES:
  :CUSTOM_LABEL: hi
  :END:
Test

ফলস্বরূপ ল্যাটেক্স বাফারটি এমন কিছু হওয়া উচিত।

\section{Test}
\label{sec-1}
\label{hi}
Test

কোড, মন্তব্য এবং সাহায্যের জন্য আপনাকে ধন্যবাদ। এটা খুব সহায়ক। আমিও অনেক কিছু শিখেছি। ধন্যবাদ.
gsl

5

কোড স্নিপেটগুলির জন্য নোট করুন আপনার অবশ্যই বর্তমান বিকাশ-সংস্করণ, ব্যবহার করতে পারেন (org-version) => "8.3beta"

দয়া করে ব্যবহার করুন CUSTOM_IDএবং অভ্যন্তরীণ লিঙ্কিং। দেখুন (info "(org) Handling links")

অর্গের অভ্যন্তরীণ নামকরণের রফতানির ফলাফল সম্পর্কে বেশিরভাগ ক্ষেত্রে আপনার উদ্বিগ্ন হওয়া উচিত নয়। পরিসংখ্যান এবং শিরোনামের লিঙ্কগুলি, বলুন, রফতানির সময় সঠিক হবে। দেখুন (info "(org) Internal links")

ল্যাটেক্সের জন্য চেষ্টা করুন:

(with-temp-buffer
  (let ((org-latex-prefer-user-labels t))
(insert "
* h
:PROPERTIES:
:CUSTOM_ID: h
:END:")
(org-mode)
(org-latex-export-as-latex nil nil nil t)))

ফলাফল:

\section{h}
\label{h}

যেমন রপ্তানীকারকদের সালে ox-odtএবং ox-htmlশিরোনাম উভয় অভ্যন্তরীণ আইডি রয়েছে, IDএবং CUSTOM_ID। কোন লিঙ্কটি ব্যবহৃত হয় তা লিঙ্কের উপর নির্ভর করে:

(with-temp-buffer
  (let ((org-export-with-toc nil))
(insert "
* h
:PROPERTIES:
:CUSTOM_ID: h
:END:
[[*h]] [[#h]]")
(org-mode)
(org-html-export-as-html nil nil nil t)))

ফলাফল:

<div id="outline-container-h" class="outline-2">
<h2 id="h"><a id="sec-1"></a><span class="section-number-2">1</span> h</h2>
<div class="outline-text-2" id="text-h">
<p>
<a href="#sec-1">1</a> <a href="#h">1</a>
</p>
</div>
</div>

> 8.3 ব্যবহারকারীর জন্য ডিফল্ট উপায় নির্দেশ করার জন্য আপনাকে ধন্যবাদ! CUSTOM_ID@ মালাব্বারবা অন্য কোনও org- সম্পত্তি পাস করার জন্য ব্যবহার করার সময় কেউ এর জন্য ডিফল্ট উপায় ব্যবহার করতে পারে । আমি পাশে কিছু অন্যান্য সম্পত্তি (যেমন সিট-কী, জেনার, ভেন্যু, ইত্যাদি) পাস করার জন্য আসলে এটি ব্যবহার করছি CUSTOM_ID
gsl

1

আমি নিশ্চিত নই, তবে আপনাকে সম্ভবত এক্সপোর্টার ফাংশনটি পরামর্শ দিতে বা ওভাররাইট করতে হবে। অর্গ 8 এ, এটি org-latex-export-headline

ফাংশন শিরোনাম উপাদান, শিরোনাম সামগ্রী এবং একটি অতিরিক্ত সম্পত্তি তালিকা পায়। রফতানিকারী ফাংশনের মধ্যে, আপনি উপাদান বৈশিষ্ট্যগুলি (আপনার কাস্টম লেবেল সহ) পেতে পারেন org-element-property


পয়েন্টারের জন্য আপনাকে অনেক ধন্যবাদ। যতদূর আমি অন্যান্য পোস্ট / নিবন্ধগুলি থেকে বুঝতে পেরেছি, নতুন orgরফতানিকারক পরামর্শ দিয়ে খুব বেশি কাজ করে না, বরং একজন filterরফতানি প্রক্রিয়াটির নির্দিষ্ট পর্যায়ে ডাকা ফাংশন তৈরি করে, মোটামুটিভাবে: `` `(বিবর্তন-পরে) -লোড 'অক্স-লেটেক্স' (অ্যাড-টু-লিস্ট 'অর্গ-এক্সপোর্ট-ফিল্টার-ফাইনাল-আউটপুট-ফাংশন' আমার-ফিল্টার-ফাংশন)) `` `(ব্যাক-টিক সিনট্যাক্স কেন কাজ করে না তা আমি নিশ্চিত নই মন্তব্যে?)
gsl
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.