Avatar billede zorkmontana Nybegynder
20. marts 2009 - 11:38 Der er 8 kommentarer og
1 løsning

Variabler i tex

Hej alle i kloge hoveder ;)

Jeg er igang med at lave en rapport på universitetet, i datateknologi.
jeg har nogle forskellige brugsmønstre og klasser som skal have et id.
jeg ville gerne at jeg bare kan kalde dette id ved at fx skrive klassens navn fx \var{klasse navn} og at den så outputter IDet
er der nogen mulighed for dette?
Avatar billede Slettet bruger
20. marts 2009 - 11:54 #1
Lav dig to makroer, en som definerer relationen mellem navnet og en som til navnet giver IDet

\makeatletter
% gemmer data i \mydata@<#1>=<#2>
\newcommand\DefineRelation[2]{%
  \@ifdefinable{mydata@#1}{%
    \@namedef{mydata@#1}{#2}}}
\newcommand\Var[1]{%
  \@ifundefined{mydata@#1}{%
    \PackageError{mydata}{No data related to '#1'}{}%
  }{%
    \@nameuse{mydata@#1}%
  }%
}
\makeatother
Avatar billede zorkmontana Nybegynder
20. marts 2009 - 12:04 #2
Nice tak.
Men jeg har ikke prøvet at lave makroer til latex før.
kan du ikke prøve at forklare det?
Avatar billede Slettet bruger
20. marts 2009 - 12:20 #3
Det har som sådan ikke noget med variable at gøre. Du skal huske at TeX ikke er som programmeringssprog er flest. Vi laver bare et makronavn som på en speciel måde indeholder det navn vi ønsker at kunne henvise til senere. Værdien (det som makroen holder) er så din ID og er det som retuneres når makroen køres.

\@ifdefinable vil give en fejl hvis makroen allerede eksisterer (det er for at sikre egen bagdel).

\@namedef har den fordel at den kan lave makronavne hvor navnet indeholder tegn som \newcommand normalt ikke kan håndtere

\@ifundefined tester om en makro er defineret, det er igen for at sikre egen bagdel

\@nameuse udfører et makronavn som kan indeholde ikke standard tegn.

Bemærk at jeg ville ikke anvende æøå i nogen af navnene, værdierne kan godt indeholde æøå

hvad #1, #2 henviser til kan du læse i min LaTeXbog.
Avatar billede zorkmontana Nybegynder
20. marts 2009 - 13:46 #4
vil det sige man opretter en ny kommando for hver ting?
eller kan du vise hvordan du ville bruge den?
Avatar billede Slettet bruger
20. marts 2009 - 14:20 #5
\DefineRelation{hest}{nisse}
\DefineRelation{klasse}{ID-25}

\Var{hest} giver nisse
\Var{klasse} giver ID-25

var det ikke det du bad om?
Avatar billede zorkmontana Nybegynder
20. marts 2009 - 14:28 #6
jo super.
jeg skulle bare lige kunne gennemskue det. kan mærke det er fredag ;)
Men tusinde tak.. smider lige nogle point efter dig ;)
Avatar billede Slettet bruger
20. marts 2009 - 14:41 #7
tak for points

Husk at skrive en kommentar i dit dokument som lige forklarer til dig selv hvad disse to makroer gør. Mere af hensyn til dem som du senere giver din preamble til.
Avatar billede zorkmontana Nybegynder
20. marts 2009 - 15:00 #8
okay.. takker vil jeg huske ;)
Sidder lige og leger lidt med at lave flere subs fx

\DefineRelation{en}{hest}{horse}

\Var{en}{hest} giver horse
Avatar billede Slettet bruger
20. marts 2009 - 15:17 #9
\DefineRelation tager KUN to argumenter og \Var KUN et, så hvis du hår skrevet dette i dokumentet, så burde du få

horse hest hest

this \DefineRelation spiser {en}{hest} og lader {horse}, \Var spiser {en} erstatter med hest og lader {hest} stå

Makro programmering i LaTeX  er en meget kompliceret process, så det ville være bedre hvis du startede med at gøre op med sig selv hvad det er du gerne vil have for hvorfor.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester