I am new to Scrivener. I have tried lots of writing software and never really found the ONE feature I have been looking for. Scrivener was suggested to me by several people for its power and flexibility so hoping it can do this, but maybe not.
Essentially what I want is a “smart link” between my text and my defined Characters and Locations in my outline. In the outlining phase I want to define the character and locations I plan to use, then when writing instead of typing say “Jim Butcher” as a character, I would link to the defined character. Same with locations. The very important second part of this is that if I decide in the future to change the name of a character or location, I could do so and the usage of that anywhere in my text would be updated.
Now I know I could just use the old “Search and Replace” that every text editor has, but that can get messy sometimes, so I am really looking for something more intelligent than that.
I did try using Scrivener’s linking ability but I couldn’t figure out how to get it to update the character or location name if I change it.
Changing the name inside Scrivener is going to have to use Project Replace (under the Edit->Search menu). But if you want it to change when you compile out to another format, then look at the Replacements pane of the compile window–You could replace all instances of “Jim Butcher” with “Jack Baker” at that phase. Internally, it’d all be JB, but he would come out of the compile process a changed man.
Project Replace is essentially just Search and Replace though right? Nothing special there? Problem I have with that is it can catch things you don’t intend, and it just scares me to use it. Was hoping Scrivener could be more aware. Shame.
That would be kind of cool to have user-definable objects in Scrivener, where you could set various properties and set values and refer to the properties in the text (things like name, gender, nickname, etc.). Then on compile, the values would be put into the text. You could change names, etc. with a simple change of the corresponding values.
Probably too complicated to code, and wouldn’t cover all cases needing re-writing, but it could be very flexible and powerful.
There is no problem with catching things you don’t intend, if you go into this right. If you want names to be replaceable, what you need is to /code up/ the names you use in the first place – meaning you use placeholder names that undoubtable unique. My usual plan when I used to do this sort of thing was simply to start each “name” with a ‘/’ character, and while I was at it to shorthand the names too. So, one might have /n and /d and /nd as place holders for ‘Nancy’ and ‘Drew’ and ‘Nancy Drew’, respectively. Project Replace is not going to change any unintended text when it comes time to put in the names (whatever ultimately they are to be).
If you think about it, the feature you are dreaming of would require you to do something to each name you type to make it uniquely identifiable (making it a link to a name-giving resource). So, the suggestion above is asking you to do really the very same thing. Admittedly in a more low-tech way, but just as effective. And since it requires no special program coding to accomplish this good way, it is hard to see why anyone would do the programming required to do it the fancy way! My two cents.
Using markers around so that the compile replacements tab can change every instance of “” with “John Jacob Jingleheimer Schmidt” is the only way to do this kind of thing “safely”. If you really want to treat names as variables to be replaced at a later time, then do that. You don’t even have to pick a name then. can become any name you want at compile time with the replacements feature. Likewise, instead of “Washington DC” and “Lincoln Memorial” as settings, you can input and <Locale9.3> respectively.
I’m not aware of any software that does what you’re referring to, but when version 3 is released, you could mark all instances of a given name with a “character name” style. Then you could potentially search and replace all “character name” styled text that contains “Ed” with another name without worrying that you’ll find the new name embedded into words containing “ed”.