public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: Bastien DUMONT <bastien.dumont-VwIFZPTo/vqsTnJN9+BGXg@public.gmane.org>
To: 'Mark Johnno' via pandoc-discuss
	<pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org>
Subject: Re: Fw: Fixing lua filter to number paragraphs
Date: Sat, 24 Sep 2022 05:39:08 +0000	[thread overview]
Message-ID: <Yy6X/FXIPVN1zij3@localhost> (raw)
In-Reply-To: <e2suTdCtcLJ3u0PBmkSX9YRRukwnvuWJPhOFU1iL8lR84w_f8f9j1UrjpHEW_3oHRO5aC_mDpkazLs5dfMXA1EKkXvf4eZs3_tgIXsFq1uU=@proton.me>

The error means that the command \color is not defined, i.e. the package that defines it is not loaded. It should be fixed by adding this after addTexPreamble("\\reversemarginpar"):

addTexPreamble("\\usepackage{\\color}")

Le Friday 23 September 2022 à 11:09:42PM, 'Mark Johnno' via pandoc-discuss a écrit :
> Hi, I have been using a lua filter for a few months with no issue, however, for the last few days, I've not been able to produce a PDF. I can't find hints online. I am hoping someone can help me.
>  
> That is the error message I get:
>  
> ! Undefined control sequence.
> <argument> ... \hspace {\z@ }\ignorespaces \color
>  
> {lightgray}\tiny {[1]}\end...
> l.72 \paragraphnumber{[1]}
>  
> I had some error messages in the past, usually due to missing squared brackets which I resolved by using --trace to check where parsing was slowing down (that is where the brackets were missing), but this time --trace does not provide any hints.
>  
> I can convert the document from .md to .pdf (without the filter); that is the command I use:
> 
> $ pandoc file.md --pdf-engine=xelatex -o file.pdf
> 
> ...but when I add count-para.lua filter:
>  
> $ pandoc file.md --pdf-engine=xelatex --lua-filter=count-para.lua -o file.pdf
>  
> I get the error message mentioned above.
>  
> I also tried with another document. I get the same error message.
>  
> I tried contacting the author of the filter, in vain.
>  
> Do you have a hint about how I could troubleshoot or fix this issue?
>  
> Does the filter need to be updated?
>  
> $ pandoc -v
> pandoc 2.5
> Compiled with pandoc-types 1.17.5.4, texmath 0.11.2.2, skylighting 0.7.7
>  
> I use Trisquel GNU/Linux 10.0.1.
>  
> This is the filter:
> 
> --[[
> Make all 'regular' paragraphs into a div and assign a numeric ID
> Format this number in the margin
> Copyright © 2021 Michael Cysouw 
> Permission to use, copy, modify, and/or distribute this software for any
> purpose with or without fee is hereby granted, provided that the above
> copyright notice and this permission notice appear in all copies.
> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> ]]
> 
> local count = 0
> local chapter = 0
> local indexUserID = {}
> 
> ------------------------------
> -- Options with default values
> ------------------------------
> 
> local resetAtChapter = false
> local enclosing = "[]"
> local chapterSep = "."
> local refName = "paragraph "
> local addPageNr = true
> 
> function getUserSettings (meta)
> 
>   if meta.resetAtChapter ~= nil then
>     resetAtChapter = meta.resetAtChapter
>   end
> 
>   if meta.enclosing ~= nil then
>     enclosing = pandoc.utils.stringify(meta.enclosing)
>   end
> 
>   if meta.chapterSep ~= nil then
>     chapterSep = pandoc.utils.stringify(meta.chapterSep)
>   end
> 
>   if meta.refName ~= nil then
>     refName = pandoc.utils.stringify(meta.refName)
>     if FORMAT:match "latex" then
>       if refName == "#" then refName = "\\#" end
>     end
>   end
> 
>   if meta.addPageNr ~= nil then
>     addPageNr = meta.addPageNr
>   end
> 
> end
> 
> ------------------------
> -- Add global formatting
> ------------------------
> 
> function addFormatting (meta)
> 
>   local tmp = pandoc.MetaList{meta['header-includes']}
>   if meta['header-includes'] ~= nil then
>     tmp = meta['header-includes']
>   end
>   
>   if FORMAT:match "html" then
>     local css = [[ 
> <!-- CSS added by lua-filter 'count-para' -->
> <style>
> .paragraph-number { 
>   float: left;
>   margin-left: -5em;
>   width: 4.5em;
>   text-align: right;
>   color: grey;
>   font-size: x-small;
>   padding-top: 5px;
> }
> </style>
>     ]]
>     tmp[#tmp+1] = pandoc.MetaBlocks(pandoc.RawBlock("html", css))
>   end
>   
>   function addTexPreamble (tex)
>     tmp[#tmp+1] = pandoc.MetaBlocks(pandoc.RawBlock("tex", tex))
>   end
> 
>   if FORMAT:match "latex" then
>     addTexPreamble("\\usepackage{marginnote}")
>     addTexPreamble("\\reversemarginpar")
>     addTexPreamble("\\newcommand{\\paragraphnumber}[1]{\\marginnote{\\color{lightgray}\\tiny{#1}}[0pt]}")
>   end
>   
>   meta['header-includes'] = tmp
>   return(meta)
> end
> 
> -------------------------
> -- count Para and add Div
> -------------------------
> 
> function countPara (doc)
> 
>   for i=1,#doc.blocks do
> 
>     -- optionally reset counter
>     if  doc.blocks[i].tag == "Header"
>         and doc.blocks[i].level == 1
>         and doc.blocks[i].classes[1] ~= "unnumbered" 
>         and resetAtChapter
>     then
>         chapter = chapter + 1
>         count = 0
>     end
> 
>     -- get Para, but not if there is an Image inside
>     if  doc.blocks[i].tag == "Para"
>         and doc.blocks[i].content[1].tag ~= "Image"
>     then
> 
>       -- count paragraphs
>       count = count + 1	
>       local ID = count
>       if resetAtChapter then 
>         ID = chapter..chapterSep..count 
>       end
> 
>       -- format number to insert
>       local number = ID
>       if enclosing:len() == 1 then
>         number = enclosing..ID..enclosing
>       else
>         number = enclosing:sub(1,1)..ID..enclosing:sub(2,2)
>       end
> 
>       -- check for user-inserted ids at the start of the paragraph
>       local firstElem = pandoc.utils.stringify(doc.blocks[i].content[1])
>       local userID = firstElem:match("{#(.*)}")
>       if userID ~= nil then
>         -- add to index
>         indexUserID[userID] = ID
>         -- remove reference from text
>         table.remove(doc.blocks[i].content, 1)
>         -- remove possible space
>         if doc.blocks[i].content[1].tag == "Space" then
>           table.remove(doc.blocks[i].content, 1)
>         end
>       end
> 
>       -- insert number
>       if FORMAT:match "latex" then
>         -- use marginnote for formatting number in margin
>         local texCount = "\\paragraphnumber{"..number.."}"
>         if userID ~= nil then
>           -- add target for link to the number
>           texCount = "\\hypertarget{"..userID.."}{\n"..texCount.."\\label{"..userID.."}}"
>         end
>         table.insert(doc.blocks[i].content, 1, pandoc.RawInline("tex", texCount))
>       else
>         table.insert(doc.blocks[i].content, 1, pandoc.Space())
>         table.insert(doc.blocks[i].content, 1, pandoc.Span(number, pandoc.Attr(ID, {"paragraph-number"})))
>       end
> 
>     end
>   end
>   return doc
> end
> 
> ------------------------------
> -- set in-text cross-references
> ------------------------------
> 
> function setCrossRefs (cite)
> 
>   local userID = cite.citations[1].id
>   local paraID = indexUserID[userID] 
> 
>   -- ignore other "cite" elements
>   if paraID ~= nil then
>   
>     -- make in-document cross-references
>     if FORMAT:match "latex" then
> 
>       local texInsert = refName.."\\hyperlink{"..userID.."}{"..paraID.."}"
>       if addPageNr then
>         texInsert = texInsert.." on page~\\pageref{"..userID.."}"
>       end
>       return pandoc.RawInline("tex", texInsert)
> 
>     else
>       return pandoc.Link(refName..paraID, "#"..paraID)
>     end
> 
>   end
> end
> 
> --------------------
> -- basic Pandoc loop
> --------------------
> 
> return {
>   { Meta = addFormatting },
>   { Meta = getUserSettings },
>   { Pandoc = countPara },
>   { Cite = setCrossRefs }
> }
> 
> -- 
> You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
> To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/e2suTdCtcLJ3u0PBmkSX9YRRukwnvuWJPhOFU1iL8lR84w_f8f9j1UrjpHEW_3oHRO5aC_mDpkazLs5dfMXA1EKkXvf4eZs3_tgIXsFq1uU%3D%40proton.me.

-- 
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/Yy6X/FXIPVN1zij3%40localhost.


  reply	other threads:[~2022-09-24  5:39 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <78BBgUlgdEJOaNOIxhfkTKPgf07yZREVfvlbeq1kqYQ59CCPSpaXEX4T_806rUzuPjbb5aIvpmynEu04PsBHsJTnWtkNNiG5dZQYfDGsO0Y=@proton.me>
2022-09-23 23:09 ` 'Mark Johnno' via pandoc-discuss
2022-09-24  5:39   ` Bastien DUMONT [this message]
2022-09-24  6:04     ` AW: " denis.maier-NSENcxR/0n0
     [not found]       ` <9c110d41d7b24b39b98b999c78d6210b-NSENcxR/0n0@public.gmane.org>
2022-09-24 14:29         ` 'Mark Johnno' via pandoc-discuss

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yy6X/FXIPVN1zij3@localhost \
    --to=bastien.dumont-vwifzpto/vqstnjn9+bgxg@public.gmane.org \
    --cc=pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).