Отмечая, что \path
можно сделать так, чтобы обернуть произвольный текст согласноПринудительные переносы строк в \url, я хотел бы использовать \path
вместо \verb
внутри biblatex для полей «дословно».
Это означало бы переопределение \verb
и \endverb
, см., например, эти строки в .bbl
файле, сгенерированном из MWE ниже.
\verb{file}
\verb /Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt
\endverb
Я не совсем понимаю, как это будет работать синтаксически.
На изображении ниже показан желаемый перенос строк в «Path»; (хорошее) поведение для имени файла с большим количеством подчеркиваний; и (не очень хорошее) поведение для имени файла без подчеркиваний.
Исходный код для вышеизложенного:
% arara: pdflatex
% arara: biber
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage[style=reading,
entryhead=true,
entrykey=false,
natbib,
hyperref=false,
url=false,
doi=false,
%style=apa,
sorting=nyt,
isbn=false,
%backref=true,
firstinits=true,
minnames=13,
maxnames=35,
minbibnames=10,
maxbibnames=100,
parentracker=true,
defernumbers=true,
backend=biber]{biblatex}
\usepackage[hyphenbreaks]{breakurl}
\PassOptionsToPackage{hyphens}{url}
\begin{filecontents}{\jobname.bib}
@inproceedings{XXXXXX,
author = {PQR},
booktitle = {BBC},
keywords = {LLM},
title = {ARP},
year = {2010a},
file = {/Users/joe/We_hold_these_truths_to_be_self-evident_that_all_men_are_created_equal_that_they_are_endowed_by_their_Creator_with_certain_unalienable_Rights_that_among_these_are_Life_Liberty_and_the_pursuit_of_Happiness/dec.txt},
}
@inproceedings{YYYYYYYY,
author = {PQR},
booktitle = {BBC},
keywords = {LLM},
title = {ARP},
year = {2010b},
file = {/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt},
}
\end{filecontents}
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one
\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
\do\Y\do\Z}
\addbibresource{\jobname.bib}
\begin{document}
Path: \path{/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt}
\nocite{*}
\printbibliography
\end{document}
решение1
Во-первых, вывод в .bbl
файле предназначен исключительно для внутреннего использования, biblatex
и его использование команды \verb
не означает, что это команда, которая фактически используется для печати поля позже в библиографии. Поэтому исправление to .bbl
have \path
вместо \verb
просто сломает biblatex
, но не пути к файлам в библиографии.
Важным для вывода является формат поля для file
. В вашей настройке (со reading
стилем) определение такое
\DeclareFieldFormat{file}{\bibstring{file}\addcolon\space \url{#1}}
поэтому biblatex
использует \url
команду из url
пакета (который он загружает).
Но это не вся история. biblatex
имеет собственную модификацию url
настроек для включения более тонкого контроля над разрывом URL в библиографии. В частности, \UrlBreaks
переопределен для всех URL, напечатанных biblatex
. Таким образом, ваше переопределение \UrlBreaks
перезаписывается.
Вы можете получить аналогичный результат для вашего переопределения с помощью biblatex
встроенных функций, установив biburlucpenalty
и biburllcpenalty
в ненулевые значения. Смотрите такжеРазрывы строк длинных URL-адресов в библиографии biblatex?. Для пущей убедительности вы также можете заглянуть в настройки biburlnumpenalty
.
\documentclass{article}
\usepackage[style=reading, backend=biber]{biblatex}
\setcounter{biburlucpenalty}{9000}
\setcounter{biburllcpenalty}{9000}
%\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@inproceedings{XXXXXX,
author = {PQR},
booktitle = {BBC},
keywords = {LLM},
title = {ARP},
year = {2010},
file = {/Users/joe/We_hold_these_truths_to_be_self-evident_that_all_men_are_created_equal_that_they_are_endowed_by_their_Creator_with_certain_unalienable_Rights_that_among_these_are_Life_Liberty_and_the_pursuit_of_Happiness/dec.txt},
}
@inproceedings{YYYYYYYY,
author = {PQR},
booktitle = {BBC},
keywords = {LLM},
title = {ARP},
year = {2010},
file = {/Users/joe/Weholdthesetruthstobeself-evidentthatallmenarecreatedequalthattheyareendowedbytheirCreatorwithcertainunalienableRightsthatamongtheseareLifeLibertyandthepursuitofHappiness/dec.txt},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Если вы не хотите использовать biblatex
встроенные функции и хотите перенести свои собственные url
настройки в biblatex
, то потребуется проделать немного дополнительной работы.
Самое дешевое решение, которое я нашел, было
\newcommand*{\mkjcurlbreaks}{%
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks% save the current one
\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j%
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t%
\do\u\do\v\do\w\do\x\do\y\do\z\do\A\do\B\do\C\do\D%
\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M\do\N%
\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X%
\do\Y\do\Z}}
\mkjcurlbreaks
\DeclareFieldFormat{file}{\bibstring{file}\addcolon\space\mkjcurlbreaks\url{#1}}
Альтернативный подход мог бы изменитьопределение biblatex
's\biburlsetup
напрямую.