Hi Chuck, Thanks for your answer - I didn't know about that behavior of #+CALL, and I'm sure it will be useful sometime. However, this is not exactly what I was getting at. Here's what I want: 1. First of all, my code needs to tangle correctly - for this I use :noweb and :noweb-ref in some of the chunks, to structure things better. org-babel-tangle produces a working source file. 2. Upon export, most source blocks should export as-they-are. However, when I use :noweb or :noweb-ref, I want two things: a) Noweb chunk names should not be expanded upon export - e.g. <> should be exported like that b) Chunks with :noweb-ref should be identified by their chunk name in the exported code, e.g. prepended by "<>=" in the line before the chunk name. 3. As part of the explanation in my org file, I have some other source blocks (e.g. Ditaa) which are not part of the tangle output, but rather I use to produce diagrams or other stuff. For these, I need ":exports results" behavior. And here's my current status: 1. Works, basic org-babel functionality, no issues :) 2.a. Works by setting ":noweb no-export", no problems. 2.b. Works by modifying my exporter to include the necessary text in the exported output. *However*, the exporter can only access the :noweb-ref header argument if the =org-export-use-babel= variable is set to =nil=. Otherwise, it seems that all org-babel related headers (including :noweb, :noweb-ref and :exports) are removed from the block before it gets passed to the exporter functions. 3. Only works if =org-export-use-babel= is set to =t=, since otherwise org-babel (who does the selection of what gets exported based on :exports) never gets called. Basically, my problem is the contradiction between (2.b) and (3) above, with respect to the org-export-use-babel variable. What I would like to know is if there is a way to keep the :noweb and :noweb-ref header arguments in the block, even after org-babel processes them. For (2.b), I also experimented with setting =org-babel-exp-code-template=, unfortunately I encountered two problems: 1. =org-fill-template= sorts keys by length, which meant that when "%noweb-ref" appears in the template, it always gets interpreted as "%noweb" followed by the string "-ref". 2. I only want the value of :noweb-ref to be output when the parameter is specified, but =org-fill-template= doesn't handle that sort of logic - the header argument is always expanded in the template, even when its value might be missing or "no". So, I'm still looking for a good solution to my problem. In the meantime, I can generate my Ditaa diagrams separately and just include the output in my org file, which is not tragic but not the most elegant :) Hope this further clarifies things! Best, --Diego On Wed, Oct 23, 2019 at 6:51 PM Berry, Charles wrote: > Diego, > > I am not sure I understand. Here is my interpretation: > > You wish to have `:exports both' behavior in your org export. > > You want noweb references in the exported code to render as > angle-bracketed chunk names, such as <> rather than being expanded > in place. > > If that is what you want, you can use the feature of CALL keywords that > resets the header arguments for the src block it calls to obtain different > behavior with the same code. For example: > > #+begin_src org > ,#+name: template-chunk > ,#+begin_src emacs-lisp :noweb no > (concat c b a > <> > ) > ,#+end_src > > ,#+CALL: template-chunk() :noweb yes :var a="A" b="B" c="C" > > ,#+begin_src emacs_lisp :noweb-ref super-duper-code > (concat a b c) > ,#+end_src > #+end_src > > exports as > > --8<---------------cut here---------------start------------->8--- > ,---- > | (concat c b a > | <> > | ) > `---- > > ,---- > | CBAABC > `---- > > > ,---- > | (concat a b c) > `---- > --8<---------------cut here---------------end--------------->8--- > > HTH, > > Chuck > > > On Oct 22, 2019, at 1:29 PM, Diego Zamboni wrote: > > > > Hi, > > > > I'm working on a Leanpub Markua exporter (not quite complete yet but > already usable, if you are interested: > https://github.com/zzamboni/ox-leanpub/tree/book-and-markua) > > > > I would like to include the value of :noweb-ref for code blocks in > exported output, like noweb originally did, e.g. something like this: > > > > #begin_src emacs_lisp :noweb-ref super-duper-code > > ... > > #end_src > > > > to produce something like this in the export: > > > > <>= > > ... > > > > After much poking around, I figured that the :noweb and :noweb-ref > header args are removed by org-babel *before* the src block makes it to the > exporter. I also discovered that by setting org-export-use-babel to nil I > could disable this behavior, which means that my exporter can access the > :noweb-ref argument by parsing the :parameters property (see > https://github.com/zzamboni/ox-leanpub/blob/book-and-markua/ox-leanpub-markua.el#L388 > ). > > > > This was good for my original purpose, but I just realized that this > also disables other useful org-babel features on export, such as the > processing of the :exports header argument, which means that both code and > results are always included in the export regardless of what :exports says > :) > > > > I have tried using org-babel-exp-code-template, but unfortunately if I > try to use "%noweb-ref" as a key in its value, it gets replaced by the > value of :noweb followed by "-ref" in every case. > > > > Is there some other way of accessing org-babel header arguments like > :noweb-ref from the exporter, but without having to disable org-babel > processing completely? Any other ideas for achieving what I want? > > > > Thanks for any ideas, > > --Diego > > > > >