# How to set up definitions (as in LaTeX) in scribble?

**URL:** https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654
**Category:** Questions & Answers
**Created:** [March 26, 2025, 8:42am UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654 "2025-03-26T08:42:56Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![danielittlewood](https://avatars.discourse-cdn.com/v4/letter/d/779978/32.png) [@danielittlewood](https://racket.discourse.group/u/danielittlewood)
#### Post date: [March 26, 2025, 8:42am UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/1 "2025-03-26T08:42:56Z")

</div>

I am trying to use scribble to write a technical document, with "defined terms". I would like in one place to be able to make a definition and give it a tag, and then refer to that tag elsewhere (perhaps in the same doc, perhaps from another doc).

So something like this:

```scheme
@definition[#:tag "partition"]{A @dt{disk partition} is a separated part of physical memory, defined in the partition table.}
... elsewhere
See @defref["partition"] for more details.

```

I am completely new to scribble and racket, but I have read parts of the documentation. I can see that section and secref resemble what I want, and that I'll probably need a new "tag type" (like 'part is used for sections). But I'm struggling to understand how to actually extend scribble in this way. I get that I probably need to define a new function, but how do I "hook in" to the tagging system?

---

<div class="post-metadata">

### Author: ![joskoot](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/joskoot/32/1964_2.png) [@joskoot](https://racket.discourse.group/u/joskoot)
#### Post date: [March 26, 2025, 9:49am UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/2 "2025-03-26T09:49:17Z")

</div>

Would elemtag and elemref do what you want?

---

<div class="post-metadata">

### Author: ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)
#### Post date: [March 26, 2025, 11:38am UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/3 "2025-03-26T11:38:00Z")

</div>

Is the `tech` form sufficient? Along with `deftech`? See [4.2.7&nbsp;Links](https://docs.racket-lang.org/scribble/section-links.html#%28def._%28%28lib._scribble%2Fmanual..rkt%29._deftech%29%29)

---

<div class="post-metadata">

### Author: ![danielittlewood](https://avatars.discourse-cdn.com/v4/letter/d/779978/32.png) [@danielittlewood](https://racket.discourse.group/u/danielittlewood)
#### Post date: [March 26, 2025, 10:17pm UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/4 "2025-03-26T22:17:17Z")

</div>

Thank you both. `tech` seems like exactly what I need! I'm a bit confused by the syntax. I can get it working just fine within a single document. I tried calling it from another file with

```scheme
@tech[doc: '(lib "the-other-file.scrbl")]{field}

```

and it just renders with a "badlink" but no error. I get the same if I just put `#:doc "the-other-file.scrbl"`. I could only find this cheat sheet to see how it works: [Scribble Cheatsheet](https://docs.racket-lang.org/scribble-cheatsheet/index.html?tag=%28part._%28.%27%28lib._scribblings%2Fguide%2Fguide..scrbl%29.%27._.%27contracts.%27%29%29&version=5.90.0.2)

I also noticed that I didn't get any warning when the ref was missing (if I made a typo). I do get a warning when I use `secref` with a section that

---

<div class="post-metadata">

### Author: ![EmEf](https://avatars.discourse-cdn.com/v4/letter/e/53a042/32.png) [@EmEf](https://racket.discourse.group/u/EmEf)
#### Post date: [March 26, 2025, 10:52pm UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/5 "2025-03-26T22:52:34Z")

</div>

See

[

| 

[7 Running scribble](https://docs.racket-lang.org/scribble/running.html#%28part._xref-flags%29)  
[docs.racket-lang.org](https://docs.racket-lang.org/scribble/running.html#%28part._xref-flags%29)

 | 

[![](data:image/png;base64,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)](https://docs.racket-lang.org/scribble/running.html#%28part._xref-flags%29)

 |

](https://docs.racket-lang.org/scribble/running.html#%28part.\_xref-flags%29)

It may help.

---

<div class="post-metadata">

### Author: ![LiberalArtist](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/liberalartist/32/151_2.png) [@LiberalArtist](https://racket.discourse.group/u/LiberalArtist)
#### Post date: [March 26, 2025, 11:39pm UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/6 "2025-03-26T23:39:14Z")

</div>

> [@danielittlewood](#):
>
> Thank you both. `tech` seems like exactly what I need! I'm a bit confused by the syntax. I can get it working just fine within a single document. I tried calling it from another file with
> 
> ```scheme
> @tech[doc: '(lib "the-other-file.scrbl")]{field}
> 
> ```
> 
> and it just renders with a "badlink" but no error. I get the same if I just put `#:doc "the-other-file.scrbl"`.

You should only need `#:doc` if the definition of the term is in a different Scribble _document_, not if it is merely in a different file that ends up in the same document, e.g. via `include-section`.

---

<div class="post-metadata">

### Author: ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)
#### Post date: [March 27, 2025, 4:36pm UTC](https://racket.discourse.group/t/how-to-set-up-definitions-as-in-latex-in-scribble/3654/7 "2025-03-27T16:36:58Z")

</div>

> > ![](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/liberalartist/45/151_2.png "LiberalArtist") | [LiberalArtist](https://racket.discourse.group/u/liberalartist)  
> > March 26 |
> > 
> > - | - |
> 
> > ![](https://global.discourse-cdn.com/free1/uploads/racket/original/2X/f/fdb1766ca4abfc53662589e86f0a94d447d0d758.png)danielittlewood:
> > 
> > Thank you both. `tech` seems like exactly what I need! I'm a bit confused by the syntax. I can get it working just fine within a single document. I tried calling it from another file with
> > 
> > ```scheme
> > @tech[doc: '(lib "the-other-file.scrbl")]{field}
> > 
> > ```
> > 
> > and it just renders with a "badlink" but no error. I get the same if I just put `#:doc "the-other-file.scrbl"`.
> 
> You should only need `#:doc` if the definition of the term is in a different Scribble _document_, not if it is merely in a different file that ends up in the same document, e.g. via `include-section`.

Indeed, the distinction between document and file-on-disk is not unique to Scribble, but it did confuse me at first. When do I need special work for cross-references? When not? Depends on the _document_ 🙂
