ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Conditional commands
@ 2009-06-29 19:41 Andreas Schneider
  2009-06-30 16:14 ` Andreas Schneider
  0 siblings, 1 reply; 2+ messages in thread
From: Andreas Schneider @ 2009-06-29 19:41 UTC (permalink / raw)
  To: ntg-context


[-- Attachment #1.1: Type: text/plain, Size: 920 bytes --]

Hi,

I'm currently trying to make a command that outputs different text
depending on the situation it has been called, but I'm absolutely stuck
there (I'm not very familiar with TeX, so it's probably obvious to most
of you :-/). It currently looks like this:

\doassign[mycite][last=]
\def\mycite[#1]{%
  \footnote{%
     \doifelse{\mycitelast}{#1}{Ebenda}{\cite[alternative=data][#1]}%
  }
  \doassign[mycite][last=#1]
}

The idea is as follow: if I cite the same citation two or more times in
a row (e.g. Some text\mycite[chan_genetic_2005] ... more
text\mycite[chan_genetic_2005]) it should only output the whole
quotation the first time, and "Ebenda" all the other times. But as it
seems, the \doifelse always evaluates to false and therefore outputs
the whole citation every time.

Does someone see what I might be doing wrong? Or is there even a better
way to do this?

Thanks,
Andreas.

[-- Attachment #1.2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1948 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Conditional commands
  2009-06-29 19:41 Conditional commands Andreas Schneider
@ 2009-06-30 16:14 ` Andreas Schneider
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas Schneider @ 2009-06-30 16:14 UTC (permalink / raw)
  To: ntg-context


[-- Attachment #1.1: Type: text/plain, Size: 3736 bytes --]

Hello again,

after fiddling around some more, I stumbled across \getvalue which
seems to solve my problems - for whatever reason ... I guess it does
some preprocessing.

I now got my bibliography enhancements (I needed so far) running. If
someone else needs it, here it is:

\def\mycite{\dodoubleempty\domycite}
\def\defaultciterepeat{Ebenda}
\def\defaultciteprefix{Vgl. }
\def\defaultcitepage{S. }
\def\defaultcitechapter{Kap. }

\def\domycite[#1][#2]{%
  \ifsecondargument
    \getparameters[MCP][prefix=\defaultciteprefix,page=,chapter=,suffix=,#1]
    \doinsertmycite[#2]{\MCPprefix}{%
      \expandoneargafter\doifnotempty{\MCPpage}{\
\defaultcitepage\MCPpage.}%
\expandoneargafter\doifnotempty{\MCPchapter}{\
\defaultcitechapter\MCPchapter.}%
\expandoneargafter\doifnotempty{\MCPsuffix}{\ \MCPsuffix}% } \else
    \doinsertmycite[#1]{\defaultciteprefix}{}
  \fi
}

\def\doinsertmycite[#1]#2#3{%
  \footnote{%
    #2%prefix
    \doifelse{\getvalue{mycitelast}}{#1}%
      {\defaultciterepeat\doifempty{#3}{.}}%
      {\doifelse{\getvalue{mycitepast #1}}{used}%
        {\bgroup%
         \getcitedata[arttitle][#1] to \bibtitle
         \cite[alternative=authoryear][#1]. \bibtitle.%
         \egroup}%
        {\cite[alternative=data][#1]}}%
    #3%suffix
  }
  \setvalue{mycitelast}{#1}
  \setvalue{mycitepast #1}{used}
}

Essentially all it does is: wrap \mycite around \cite to process the
output depending on the circumstances:
  * if the citation is the first of this bib-entry, it is places
    completely into the footnote (alternative=data)
  * if the citation was used before, in the document, it is only
    referenced rather short (author, year, title)
  * if the citation was used _directly_ before, it is not repeated but
    only referenced with the word "Ebenda" (meaning more or less "see
    above")
It is also able to prepend text (like "Vgl. " [="Compare"]) and append
text (like page or chapter number, or a custom string).

Examples:
  \mycite[some_bib_entry]
  \mycite[prefix={Vgl. }, page=123, chapter={Introduction},
  suffix={some more text.}][some_bib_entry]

The only thing it doesn't handle (yet) is, if a citation was
directly used before on a previous page. Then mycitelast should be
reset so that at least the short citation is used. But I wasn't able to
find a safe way to do this. I fiddled around with
\insertpagebreakhandler for a while, but apart from not yielding any
result, I don't believe, that it is intended for stuff like this.

So if someone knows a way to handle that last case (page break) too, I
would be glad to hear about it.

Regards,
Andreas.


On Mon, 29 Jun 2009 21:41:49 +0200
Andreas Schneider <aksdb@gmx.de> wrote:

> Hi,
> 
> I'm currently trying to make a command that outputs different text
> depending on the situation it has been called, but I'm absolutely
> stuck there (I'm not very familiar with TeX, so it's probably obvious
> to most of you :-/). It currently looks like this:
> 
> \doassign[mycite][last=]
> \def\mycite[#1]{%
>   \footnote{%
>      \doifelse{\mycitelast}{#1}{Ebenda}{\cite[alternative=data][#1]}%
>   }
>   \doassign[mycite][last=#1]
> }
> 
> The idea is as follow: if I cite the same citation two or more times
> in a row (e.g. Some text\mycite[chan_genetic_2005] ... more
> text\mycite[chan_genetic_2005]) it should only output the whole
> quotation the first time, and "Ebenda" all the other times. But as it
> seems, the \doifelse always evaluates to false and therefore outputs
> the whole citation every time.
> 
> Does someone see what I might be doing wrong? Or is there even a
> better way to do this?
> 
> Thanks,
> Andreas.
> 

[-- Attachment #1.2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1948 bytes --]

[-- Attachment #2: Type: text/plain, Size: 487 bytes --]

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-06-30 16:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-29 19:41 Conditional commands Andreas Schneider
2009-06-30 16:14 ` Andreas Schneider

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).