2013-08-27 7 views
6

Ich möchte eine Pufferweite Variable in einer Organisationsdatei definieren und den Wert aus dieser Variable später verwenden, um z. B. die Breite der Bilder für den Latexexport festzulegen.Emacs org-mode: Variable im Puffer definieren und auf Variable zugreifen

Gibt es einen Weg, wie dies getan werden kann?

Kann dies mit #+CONSTANTS: getan werden?

Idealerweise sollte es wie folgt funktioniert:

I eine variable image_width in einen Puffer zu definieren, z.B.

image_width=10 

und verwenden diese Variable in #+ATTR_LATEX: für Einstellungen, z.B. #+ATTR_LATEX: :width $image_width.

Antwort

0

Definieren Sie eine Variable in Ihren .emacs. Genauso wie Sie eine Funktion definieren, können Sie eine Variable an einen bestimmten Wert binden. Sie können Setq oder Defvar, Defconst, je nachdem, was Sie wollen. Für eine Instanz:

(setq Bildbreite 10)

Stellen Sie sicher, Puffer eval-nachdem Sie Ihre Variable gesetzt.

+0

danke für das Aufzeigen, wie man eine Variable definiert. Wie kann ich dann den Wert, d. H. Die 10 in der Org-Datei bekommen? Idealerweise sollte der tatsächliche Wert in der Org-Datei ** vor dem Export der Org-Datei enthalten sein. – jotsetung

2

Zwei Möglichkeiten (ungetestet), wenn Sie möchten, dass Ihr ständiger Puffer spezifisch sein:

  • "Lokale Variable (n)" in den letzten 8 Zeilen (oder so) Ihre Org-Datei;

  • Verwenden Org "# + MACRO:" Feature

+1

Ich habe versucht, Sie nähern und definiert das Makro '# + MACRO: image_width 16'. Im Klartext in der Org-Datei funktioniert das perfekt und wie erwartet wird {{{image_width}}} 'in der exportierten Datei durch _16_ ersetzt. Wenn ich es jedoch zu einem LaTeX-Attribut wie '# + ATTR_LATEX hinzufügen:: center: placement [H]: width {{{image_width}}} cm 'bekomme ich' \ includegraphics [width = {{{image_width}}} cm ] {test.png} 'und nicht' \ includegraphics [width = 16cm] {test.png} '. Also, das funktioniert nicht für mich. – jotsetung

+0

Sie sollten dies mindestens als Feature melden. Ich habe den Eindruck, dass es gut funktionieren sollte. – fniessen

0

Sie eine Variable, die den #+NAME:-Tag deklarieren können. Dann benutzen Sie es, indem Sie es an :var im src Block übergeben, den Sie es brauchen.

so etwas wie dieses Dies wird aussehen:

#+NAME: instance-id 
| abcd | 

#+BEGIN_SRC sh :var id=instance-id 
echo $id 
#+END_SRC 

#+RESULTS: 
: abcd 

#+BEGIN_SRC python :var myvar=instance-id[0, 0] 
print myvar 
#+END_SRC 

#+RESULTS: 
: abcd 

Notiere die instance-id[0, 0] in src Block Python. Ich habe die Variable als ein Array deklariert, aufgrund dessen ich den Wert wie folgt referenzieren muss.